1.简单的查询和插入语句
_1.简单的查询语句
如:SELECT * FROM 表名;
_2.简单插入语句
如:INSERT INTO 表名(列1, 列2) VALUES (列1的值, 列2的值);
MYSQL
中插入数据时以行为单位,未显示指定的列的值将被设置为NULL
_3.批量插入
如:INSERT INTO 表名(列1, 列2) VALUES (列1的值, 列2的值), (列1的值, 列2的值), (列1的值, 列2的值);
2.列的属性
_2.1.默认值
前面说,插入时未指定的列将采用NULL
,若想采用指定值,可以定义列的时候增加一个DEFAULT
属性。
如:列名 列的类型 DEFAULT 默认值
_2.2.NOT NULL
要求表中的某些列必须有值,不能存放NULL
时,可以给列添加NOT NULL
属性。
如:列名 列的类型 NOT NULL
_2.3.主键
有时在表中可以通过某个列或某些列的列组合来确定一条唯一的记录,可把这个列或这些列的列组合称为候选键。
一个表可能有多个候选键,我们可以选择一个候选键作为表的主键。一个表至多只能有一个主键。主键值不能重复,通过主键可找到唯一的一条记录。主键默认具备NOT NULL
属性。
_2.3.1.定义方式1
如主键只是单个列的话,可直接在列后声明PRIMARY KEY
CTRAETE TABLE student_info
(
number INT PRIMARY KEY,
name VARCHAR(5)
);
_2.3.2.定义方式2
也可以把主键的声明单独提取出来,用下面的形式声明:PRIMARY KEY (列名1, 列名2);
此时,把这个主键声明放到列定义之后就好了。
CREATE TABLE student_info
(
number INT,
name VARCHAR(5),
PRIMARY KEY (number)
);
_2.4.UNIQUE
约束
除主键外,有时也希望其他某个列或列组合中存储的值是唯一的。此时,需给这些有必要保持唯一性的列或列组合添加UNIQUE
约束。
_2.4.1.为单个列声明UNIQUE
约束,可直接在该列后填写UNIQUE
或UNIQUE KEY
。
_2.4.2.也可把UNIQUE
约束的声明单独提取出来,用下面的形式声明:UNIQUE [KEY] [约束名称] (列名1, 列名2);
_2.5.主键和UNIQUE
约束的对比
主键和UNIQUE
约束都能保证某个列或列组合的唯一性,但是:
(1).一张表中只能定义一个主键,却可定义多个UNIQUE
约束。
(2).主键列不允许存放NULL
,而声明了UNIQUE
约束的列可以存放NULL
,且NULL
可重复地出现在多条记录中。
(3).如我们没有给表定义主键,MYSQL
会将第一个声明为NOT NULL
且具有UNIQUE
约束的列或列组合自动定义为主键。
_2.6.外键
插入到学生成绩表的number
(学号)列中的值必须在学生基本信息表的number
列中找到。否则,我们就插入了一个未定义的学号。为解决此类问题,引入外键。
定义的语法是:CONSTRAINT [外键名称] FOREIGN KEY (列1, 列2) REFERENCES 父表名 (父列1, 父列2);
其中,外键名称是可选的。
如表A
中的某个列或某些列依赖于B
表中的某个列或某些列,就称A
表为子表,B
表为父表。子表和父表可用外键关联起来。
CREATE TABLE student_scode(
number INT,
subject VARCHAR(30),
score TINYINT,
PRIMARY KEY (number, subject),
CONSTRAINT FOREIGN KEY (number) REFERENCES student_info(number)
);
这样,每当向student_score
插入记录时候,MYSQL
会帮我们检查插入的学号是否能在student_info
表中找到,找不到时,报错。
在MYSQL
中,父表中被子表依赖的列或列组合必须建立索引。如列或列组合已经是主键或有UNIQUE
属性,则它们默认情况下就会建立索引。
_2.7.AUTO_INCREMENT
可以为使用整型类型或浮点数类型的列声明该属性,在之后插入新记录时,可不显式指定该列的值,MYSQL
会自动帮该列生成自动增长的唯一值。
为某个列声明AUTO_INCREMENT
属性语法:列名 列的类型 AUTO_INCREMENT
插入新纪录时,未显式指定AUTO_INCREMENT
列值时,为其生成的值是在当前列的最大值基础上加1
。
注意:
(1).一个表中最多有一个具有AUTO_INCREMENT
属性的列。
(2).具有AUTO_INCREMENT
属性的列必须建立索引。主键和具有UNIQUE
属性的列会自动建立索引。
(3).拥有AUTO_INCREMENT
属性的列不能再通过指定DEFAULT
属性来指定默认值。
(4).在日常工作中,AUTO_INCREMENT
一般作为主键的属性,来自动生成唯一标识一条记录的主键值。
_2.8.列的注释
可在每一个列的末尾添加COMMENT
来为列添加注释。
CREATE TABLE first(
id int COMMENT '首个列',
name char(10)
) COMMENT '测试表';
_2.9.显示宽度与ZEROFILL
对于无符号整数类型的列,如想在查询结果中让数字左边补0
,就得给该列加一个ZEROFILL
属性。
具备ZEROFILL
的无符号整数类型列,在数值显示宽度不足列的显示宽度时,在左边补充0
,以便达到显示宽度。
也可自己指定显示宽度,如:ALTER TABLE zerofill_table MODIFY i1 INT(5) UNSIGNED ZEROFILL;
上述将zerofill_table
的i1
列的显示宽度修改为5
。
注意:
(1).在创建表时,如声明了ZEROFILL
属性的列没有声明UNSIGNED
属性,则MYSQL
会为该列自动生成UNSIGNED
属性。
(2).不同的整数类型有不同的显示宽度。
TINYINT
默认为4
,INT
默认为11
,加了UNSIGNED
属性,类型的显示宽度减1
。
(3).显示宽度不影响列所需的存储空间及取值范围。
(4).只有列的实际值的位数小于显示宽度时才会在左侧补0
,实际值的位数大于显示宽度则照原样属性。
(5).仅对列设置显示宽度,而不声明ZEROFILL
属性的话,对查询结果无影响。
_2.10.查看表结构时的列属性
诸如:DESC student_info;
查看表属性时:
(1).Null
列代表该列是否可存储NULL
,值为NO
,表示不允许存储NULL
,YES
时,则允许。
(2).Key
列存储关于所谓的键的信息,值PRI
是PRIMARY KEY
的缩写;值为UNI
是UNIQUE KEY
的缩写。
(3).Default
列代表该列的默认值。
(4).Extra
列显示一些额外的信息,比如说如某个列具有AUTO_INCREMENT
属性,就会显示在这个列中。
_2.11.标识符的命名
诸如数据库名,表名,列名,约束名,别名,视图名,存储过程名等,统统称为标识符。
以下几种命名不允许:
(1).名称中全是数字
(2).名称中有空白字符。
(3).名称使用了MYSQL
中的保留字。
CREATE,DATABASE,INT,DOUBLE,DROP,TABLE
等,都是供MYSQL
内部使用的,称为保留字。不用于自定义名称。
虽然某些名称可能会导致歧义,但如果坚持要用,需使用反引号将定义的名称引起来。
'1234567'
'world1 world2'
'create'
即使用反引号将名称引起来,数据库名,表名,列名仍需注意不能以空格字符结尾。