本章,主要就数据库和表的基本操做做以总结。web
须要事先说明的一点是,我写的全部MySQL的代码将采用大写形式。虽说至少在MySQL环境下,SQL语句的大小写并不会影响代码运行结果,可是,有同行讲到,SQL语句大写比是一个更好地习惯。由于在执行程序的时候,若是你用的是小写,会先转化为大写字母而后执行,而若是大写,那就能够省一个转化的时间。在大型的ERP系统开发时,每每会这么要求。因此,我也就尽可能规范一些了。算是帮本身养成好的习惯。sql
MySQL中,数据库的操做基本有:建立,查看,选择,以及删除4种。数据库
CREATE DATABASE database_name;
,后面的database_name是你要建立的数据库的名称;SHOW DATABASES;
,查看已经建立的全部数据库USE database_name;
,选择名为database_name的数据库,不少数据库的操做都须要先选中一个数据库,再执行进一步的操做;DROP DATABASE database_name;
,删除名为database_name的数据库;建好了数据库,咱们选择一个数据库,来对它进行表的相关操做。表是数据在数据库中一种逻辑上的存储形式,和常见的电子表格相似,其中每一行表明一个记录(能够理解成一个数据对象),而记录的每一列表明一个字段(其实你能够理解成数据对象的属性)。编程
表的基本操做有建立,查看,删除,修改4种基本操做。我先从建立表提及。编程语言
CREATE TABLE table_name( Att_name_1 Data_type_1, Att_name_2 Data_type_2, ... Att_name_n Data_type_n, );
其中,table_name
表示要建立的表的名称;Att_name_i
表示第i个字段(也就是属性)的名称,Data_type_i
表示第i个属性所对应的值的数据类型。这里多说一句,Mysql中的数据类型大体上分为“整数”,“浮点数”,“定点数”,“位”,“日期”,“时间”,“字符串”这么几种。东西太杂,也不必具体介绍,简单知道就行,具体用到时,能够再查。svg
举个例子,如今以下建立一个表"tab_student"(最好养成良好的编程习惯,这里为了代表在建立表,最好以 “tab_”+ 的形式设置表名):3d
CREATE TABLE tab_student( ID VARCHAR(20), Score INT );
表"tab_student"中有两个字段,学生的身份ID
以及对应的成绩Score
,其中,ID
是一个VARCHAR(20)型的字符变量,里面的20是参数;Score
则是一个整数类型的变量。code
另外,若是想要查看当前数据库中有哪些表,能够先选择当前数据库,再经过语句SHOW TABLES
查看。而具体查看已经建立的某个表的信息,则经过下面讲的方式了。xml
先说说如何查看数据库当中有哪些表。方法是选择数据库后,用语句SHOW TABLES
:对象
USE test; # 选择数据库test SHOW TABLES; # 查看test中的表tab_student
好比咱们建立了数据库test
,而后在test
中建立了表tab_student
,运行结果以下图所示:
能够看到系统给出了一个列表,里面是如今数据库test
中全部的表。
那么如何查看某个表的具体信息呢?仍是先选择数据库,而后用DESCRIBE
语句查看。
USE test; # 选择数据库test DESCRIBE tab_student; # 查看test中的表tab_student
运行结果以下图所示:
若是想要查看表结构更详细的定义,能够采用SHOW CREATE TABLE
语句,例如:
SHOW CREATE TABLE tab_student;
须要注意的是,在显示表的详细信息时,能够用;
, \g
或者\G
来结束语句(我上面的代码用的是;
)。其实,若是用\G
可让表的详细信息显示得更加美观。运行结果你本身跑一下就能发现区别,我这里不给图了。
DROP TABLE table_name
语句用来删除表,其中"table_name"是表名。
修改表主要分为修改表名和修改表中的字段。
ALTER TABLE old_table_name RENAME new_table_name
语句用来修改表名,其中"old_table_name"是旧表名,"new_table_name"是新表名,固然,这里所要操做的对象必定得是存在的,否则会报错。
例如,仍是上面的例子:
ALTER TABLE tab_student RENAME tab_student1;
我分两行写,是为了看起来更清楚。如今将表格tab_student改名为tab_student1。而后咱们在用上面说的查看表格的命令,能够看到以新名命名的表格,同时查看旧的名字时,报错。
ADD
语句在表格末尾加字段:ALTER TABLE table_name ADD Att_name_1 Data_type_1;
在表"table_name"末尾,增长属性名为Att_name_1
,数据类型为Data_type_1
的字段
ADD ... FIRST
语句在表格开头加字段:ALTER TABLE table_name ADD Att_name_1 Data_type_1 FIRST;
在表"table_name"开头,增长属性名为Att_name_1
,数据类型为Data_type_1
的字段
ADD ... AFTER ...
语句在指定字段以后添加字段:ALTER TABLE table_name ADD Att_name_1 Data_type_1 AFTER Att_name_2;
在属性名为Att_name_2
的字段后,增长属性名为Att_name_1
,数据类型为Data_type_1
的字段
就上边那个"tab_student"表为例,我如今在字段ID
的后面增长一个属性名为Gender
,数据类型为CHAR
的字段。
ALTER TABLE tab_student ADD Gender CHAR AFTER ID;
能够看到一开始如左图的表变成了右图的样子。其余添加字段的操做相似,这里不举例了。
语法形式以下:
ALTER TABLE table_name DROP Att_name;
将属性名为"Att_name"的字段删除。
ALTER TABLE table_name MODIFY Att_name New_data_type;
将属性名为"Att_name"的字段的数据类型新设置为"New_data_type"。
ALTER TABLE table_name CHANGE Old_att_name New_att_name Old_data_type;
将属性名为"Old_att_name",数据类型为"Old_data_type"的字段名修改成"New_att_name"。注意此处用的是CHANGE
而非MODIFY
(用混了会报错),再者,三个参数在代码中的顺序不要搞错。以表tab_student为例,咱们如今想要将字段名"ID"改成"IDs",代码以下:
ALTER TABLE tab_student CHANGE ID IDs CHAR;
这样,将表的形式由下面的左图变成了右图:
ALTER TABLE table_name CHANGE Old_att_name New_att_name New_data_type;
将属性名为"Old_att_name"的字段名修改成"New_att_name",数据类型为"New_data_type"的字段。基本语法结构与上面的修改字段名是同样的。
ALTER TABLE table_name MODIFY Att_name_1 Data_type_1 FIRST (AFTER Att_name_2);
我解释一下,括号里面是另外一种形式,先不看,括号外头的意思是将属性名为"Att_name_1",数据类型为"Data_type_1"的字段放置于表的开头。而括号里面的是另外一种修改次序的方法,表示将属性名为"Att_name_1",数据类型为"Data_type_1"的字段放置于属性名为"Att_name_2"的字段后面。
以表tab_student为例,如今将字段"Gender"放置到字段"Score"以后,代码以下:
ALTER TABLE tab_student MODIFY Gender CHAR AFTER Score;
tab_student表的形式由下面的左图变为右图:
表的约束是用来检验表中数据的完整性的,说的直白一些,就是检验表中的数据是否知足了规定的条件。以tab_student表举例来讲,若是我不肯意令字段ID为空,就能够在建表时定义相关的约束。若是用户在插入数据时,违反了这样的约束条件,就会报错。固然能够定义的约束条件分不少种,下面会一一讲解。
关键字NOT NULL
用来约束某字段不能为空,语法形式以下:
CREATE TABLE table_name( Att_name Data_type NOT NULL, ... );
上述代码将字段"Att_name"设置为非空。
关键字DEFAULT
用来设置字段的默认值。若是在插入数据时,没有为某个字段赋值,则Mysql会自动为这个字段赋值为默认值。其语法形式以下:
CREATE TABLE table_name( Att_name Data_type DEFAULT deVal, ... );
上述代码将字段"Att_name"的默认值设置为"deVal"。
关键字UNIQUE
用来设置对某个字段的惟一约束,惟一约束表示,插入的数据在这个字段上的值得是惟一的,不能重复(你能够类比通常编程语言中“键值对”的“键”)。以学生的信息系统为例,每一个人的学号信息应该是惟一的,那么在录入数据时,若是这一项出现了重复,那必然是出错了。因此咱们最好设置惟一值约束,若是出现重复,则报错。其语法形式以下:
CREATE TABLE table_name( Att_name Data_type UNIQUE, ... );
上述代码将字段"Att_name"设置为了惟一约束。
如今以上面的tab_student为例,我对tab_student中的属性设置上面说的“非空”,“默认值”,“惟一”的约束:
CREATE TABLE tab_student( ID VARCHAR(20) NULL UNIQUE, # 设置学生ID非空,且惟一 Score INT DEFAULT 0, # 设置Score默认值为0 Gender CHAR );
咱们看到表会变成下面的样子:
主键的做用在于用某个字段惟一地标识全部记录,以便在数据库中快速地查找数据。好比咱们通常用索引号来惟一标识每一条数据记录。因为主键能够是单一字段,也能够是多个字段,因此,下面分两种状况讨论:
PRIMARY KEY
设置主键。好比,仍是tab_student的例子,如今将学号设置为主键。CREATE TABLE tab_student( ID VARCHAR(20) PRIMARY KEY, # 设置学生ID为主键 Score INT, Gender CHAR );
咱们查看刚才建的表:
发现ID字段也是非空的,其实,设置了主键,则主键字段必然是非空且惟一的。
CONSTRAINT
和PRIMARY KEY
配合设置。其语法结构以下:CREATE TABLE tab_student( ID VARCHAR(20), Name VARCHAR(20), Score INT, CONSTRAINT ID_Name PRIMARY KEY (ID, Name) );
在上面代码展现的例子中,语句CONSTRAINT ID_Name PRIMARY KEY (ID, Name)
,将学生的ID和Name组合起来设置为主键。最后括号内表示的是主键涵盖的字段,而CONSTRAINT后面的ID_Name
则是为这个约束起的名字(就设置主键约束来讲,这个名字不要也没什么影响)。
例子最后生成的表信息以下:
往表中插入记录时,每每会遇到须要递增的字段。例如商品编号啊,等等。Mysql支持对这类字段设置字段值自动增长的约束。默认状况下,设置了自动增长的字段值为整数,从1开始,每次加1。又由于这种自动增长的字段确定是惟一的,因此通常咱们也把它设置为主键。
设置自动增长的关键字为AUTO_INCREMENT
CREATE TABLE tab_student( ID INT PRIMARY KEY AUTO_INCREMENT, # 将ID设置为整数类型,而且设置字段值自动增长 Name VARCHAR(20), Score INT );
如今这个表示这样的:
注意,若是要将某个字段设置为自动增长,那么必须将这个字段设置“惟一”的属性,即设置为主键或者惟一约束,不然会报错。
上面的5种约束都是对于单表,而外键约束则是保证多个表之间的参照完整性。
设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值依赖于父表。举例来讲,如今有两个表:部门表和雇员表,部门表的主键为部门编号depNo
,而雇员表中表示雇员所在部门编号的字段depno
就成为了雇员表(子表)的外键。外键设置时有如下几点要求:
设置外键的语法用FOREIGN KEY (attribute) + REFERENCES father_table_name (attribute)
的形式:
CREATE TABLE child_table_name( Att_name_1, DataType_1, Att_name_2, DataType_2, CONSTRAINT FK_name FOREIGN KEY (Att_name_1) REFERENCES father_table_name (Att_name) );