首先,非常感谢大家对上篇博文的支持,真是让本菜受宠若惊,同时对拖了这么久才出了此篇表示抱歉。
前言:此文旨在汇总从建立数据库到联接查询等绝大部分SQL语句。SQL语句虽不能说很多,但稍有时间不写就容易出错。博主希望通过此文来战胜自己的健忘,如果大家认可也可以保留起来。
"SQL"是 "Structured Query Language" 即“结构化查询语言”的简称,它是用来管理关系型数据库的。
其包括:
CREATE DATABASE 数据库名;
CREATE DATABASE test_sql
此图为SQLyog的左侧目录栏,前三个为本地自带数据库。将SQL语句全部选中运行(F8)后,F5刷新目录栏,出现了我们创建的数据库。
连接数据库:
USE
test_sql;
删除数据库:
DROP DATABASE test_sql;
接下来就开始创建表了,在创建表之前先列出几种常用的数据类型
整数数据类型:
- INT 大小:4字节
- BIGINT 大小:8字节
浮点数据类型:
- FLOAT 大小:4字节 精度:7位小数
- DOUBLE 大小:8字节 精度:15位小数
字符串数据类型:
- VARCHAR 范围:0-65535
日期数据类型:
- DATE 大小:3字节 格式:YYYY
- DATETIME 大小:8字节 格式:YYYY-MM-DD
创建表:
CREATE TABLE < 表名 > ( < 列名 > < 列的数据类型 > [ <列的约束> ] );
如:
CREATE TABLE t_student( student_name VARCHAR ( 10 ), student_birthday DATETIME , student_phone INT , student_score FLOAT );
上表中我们创建了一张学生表,并定义了姓名、生日、电话、得分四列,列名后加上数据类型。 其中要注意的是VARCHAR需要在括号内设置字符串的最大长度。
刷新之后就可以看到我们创建的数据库中多了一张表:
选择打开表可以直观的看到内容:
之后我们可以通过SQL语句也可以通过手动为表添加内容。
删除表:
DROP TABLE t_student;
复制表:
CREATE TABLE copy_student SELECT * FROM t_student;
如此我们便复制了一张名为 copy_student 的表,它包括 t_student 表中的内容与结构。 注意:复制表的同时表的约束并不能复制过来。
只复制表结构而不复制表内容:
CREATE TABLE copy_student SELECT * FROM t_student WHERE 1 = 0 ;
只需在WHERE条件中加入一个永不为真的值即可。
修改表
添加新列:
ALTER TABLE t_student ADD student_address VARCHAR ( 50 );
更改列:
ALTER TABLE t_student CHANGE student_birthday student_age INT ;
这里我们把学生生日列改为学生年龄列, CHANGE 后第一个为旧列名,第二个为新列名。
删除列:
ALTER TABLE t_student DROP COLUMN student_score;
数据库完整性
保证数据库的完整性是为了防止垃圾数据的产生,以免影响数据库的执行效率。这里简要说一些,因为毕竟不是理论类的文章,这里主要是整理汇总SQL语句。
分类:
CREATE TABLE t_student( student_id INT PRIMARY KEY , student_name VARCHAR ( 10 ), student_birthday DATETIME , student_phone INT , student_score FLOAT );
实体完整性--唯一约束:
UNIQUE
唯一约束是指给定列的值必须唯一,与主键约束不同的是它可以为空。通常加在表中不能重复的信息中,如电话号码。
CREATE TABLE t_student( student_id INT PRIMARY KEY , student_name VARCHAR ( 10 ), student_birthday DATETIME , student_phone INT UNIQUE , student_score FLOAT );
域完整性--非空约束:
NOT NULL
非空约束可以加在诸如姓名等列上。
CREATE TABLE t_student( student_id INT PRIMARY KEY , student_name VARCHAR ( 10 ) NOT NULL , student_birthday DATETIME , student_phone INT UNIQUE , student_score FLOAT );
域完整性--默认约束:
设定默认值后,可以在添加此列时不指定值,数据库会自动填充设定的默认值。
DEFAULT
现给学生表加入性别列,默认值设为“男”,这样添加新的学生信息时如果没有填写具体的性别均会默认为男性:
CREATE TABLE t_student( student_id INT PRIMARY KEY , student_name VARCHAR ( 10 ) NOT NULL , student_sex VARCHAR ( 5 ) DEFAULT ' 男 ' , student_birthday DATETIME , student_phone INT UNIQUE , student_score FLOAT );
引用完整性--外键约束:
外键约束是指在外键关联主键上强制加上一个约束,如果违反该约束,则不允许该条数据的修改。
创建主表--班级表:
CREATE TABLE t_class( class_id INT PRIMARY KEY , class_name VARCHAR ( 20 ) UNIQUE NOT NULL ); )
创建从表--学生表,并设置外键约束:
CREATE TABLE t_student( student_id INT PRIMARY KEY , s_c_id INT REFERENCES t_class(class_id), student_name VARCHAR ( 10 ) NOT NULL , student_sex VARCHAR ( 5 ) DEFAULT ' 男 ' , student_birthday DATETIME , student_phone INT UNIQUE , student_score FLOAT CONSTRAINT FOREIGN KEY(s_c_id) REFERENCES t_class(class_id);
红色标识的就是创建外键约束的方法,个人认为也是SQL语句中最难记的。
本篇博文先到这里,写起来才发现SQL比想像的多啊,所以初步打算分为三篇。第二篇讲数据增删改查这些操作、聚合函数及分组,第三篇讲SQL的子查询、组合查询以及连接查询。
感谢您的浏览,希望能对您有所帮助。