MySQL基本操做一:数据库和表

本章,主要就数据库和表的基本操做做以总结。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"是表名。

修改表

修改表主要分为修改表名和修改表中的字段。

1. 修改表名

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。而后咱们在用上面说的查看表格的命令,能够看到以新名命名的表格,同时查看旧的名字时,报错。

2. 增长字段

  • 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;

能够看到一开始如左图的表变成了右图的样子。其余添加字段的操做相似,这里不举例了。

3. 删除字段

语法形式以下:

ALTER TABLE table_name DROP Att_name;

将属性名为"Att_name"的字段删除。

4. 修改字段

  • 修改字段的数据类型:
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为空,就能够在建表时定义相关的约束。若是用户在插入数据时,违反了这样的约束条件,就会报错。固然能够定义的约束条件分不少种,下面会一一讲解。

1. 设置非空约束

关键字NOT NULL用来约束某字段不能为空,语法形式以下:

CREATE TABLE table_name(
    Att_name Data_type NOT NULL,
    ...
);

上述代码将字段"Att_name"设置为非空。

2. 设置字段的默认值

关键字DEFAULT用来设置字段的默认值。若是在插入数据时,没有为某个字段赋值,则Mysql会自动为这个字段赋值为默认值。其语法形式以下:

CREATE TABLE table_name(
    Att_name Data_type DEFAULT deVal,
    ...
);

上述代码将字段"Att_name"的默认值设置为"deVal"。

3. 设置惟一约束

关键字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
);

咱们看到表会变成下面的样子:

4. 设置主键约束

主键的做用在于用某个字段惟一地标识全部记录,以便在数据库中快速地查找数据。好比咱们通常用索引号来惟一标识每一条数据记录。因为主键能够是单一字段,也能够是多个字段,因此,下面分两种状况讨论:

  • 单字段主键:用关键字PRIMARY KEY设置主键。好比,仍是tab_student的例子,如今将学号设置为主键。
CREATE TABLE tab_student(
    ID VARCHAR(20) PRIMARY KEY, # 设置学生ID为主键
    Score INT,
    Gender CHAR
);

咱们查看刚才建的表:

发现ID字段也是非空的,其实,设置了主键,则主键字段必然是非空且惟一的。

  • 多字段主键:当主键由多个字段组合而成时,则须要关键字CONSTRAINTPRIMARY 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则是为这个约束起的名字(就设置主键约束来讲,这个名字不要也没什么影响)。

例子最后生成的表信息以下:

5. 设置字段值自动增长

往表中插入记录时,每每会遇到须要递增的字段。例如商品编号啊,等等。Mysql支持对这类字段设置字段值自动增长的约束。默认状况下,设置了自动增长的字段值为整数,从1开始,每次加1。又由于这种自动增长的字段确定是惟一的,因此通常咱们也把它设置为主键。

设置自动增长的关键字为AUTO_INCREMENT

CREATE TABLE tab_student(
    ID INT PRIMARY KEY AUTO_INCREMENT, # 将ID设置为整数类型,而且设置字段值自动增长
    Name VARCHAR(20),
    Score INT
);

如今这个表示这样的:

注意,若是要将某个字段设置为自动增长,那么必须将这个字段设置“惟一”的属性,即设置为主键或者惟一约束,不然会报错。

6. 设置外键约束

上面的5种约束都是对于单表,而外键约束则是保证多个表之间的参照完整性

设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值依赖于父表。举例来讲,如今有两个表:部门表和雇员表,部门表的主键为部门编号depNo,而雇员表中表示雇员所在部门编号的字段depno就成为了雇员表(子表)的外键。外键设置时有如下几点要求:

  • 外键所表明的字段必须依赖于已经存在的父表的主键;
  • 外键与相应的父表的主键能够不一样名;
  • 外键能够为空(null)

设置外键的语法用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)
);