在关系型数据库中,最核心的是:二维表格。一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。总之一句话,东厂破不了了案由我西厂来破,/emem,操作关系型数据库就是在操作表。够不够清楚?
Table of Contents
操作表属性
表的增(create)
创建表格式:
CREATE TABLE 表名(
字段名1 数据类型(长度) [约束|列属性],
字段名2 数据类型(长度) [约束|列属性]
)额外设置;
--示例:
CREATE TABLE users (
uid INT PRIMARY default 0 comment “用户的编号ID”,
uname VARCHAR(20),
uaddress VARCHAR(200)
);
额外设置AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
表复制(只复制结构,不复制数据):create table 新表名 like 需要复制结构的表名;
显示表创建语句:SHOW CREATE TABLE 表名;
列属性:
- 执行默认值:DEFAULT 默认值
- comment '列描述,是专门用于给开发人员进行维护的一个注释说明'
- Null:为YES的时候就表示该列可以为空
- 自动增长:auto_increment
- 约束(四种):主键、外键、非空、唯一
表的删(Delete)操作
删除一个表格:
DROP TABLE 表名;
DROP TABLE[ IF EXISTS] 表名
表的改(Update)操作
表属性:
修改表名:RENAME TABLE 表名 TO 新表名;
修改表的字符集:ALTER TABLE 表名 CHARACTER SET 字符集;
表属性添加操作:ALTER TABLE 表名 操作(下列任选一)
ADD系列:
- ADD[ COLUMN] 字段定义 -- 增加字段
- AFTER 字段名 -- 表示增加在该字段名后面
- FIRST -- 表示增加在第一个
- 加一列(纵方向):ALTER TABLE 表名 ADD 列名 类型(长度) [约束];
- 创建唯一索引:ADD UNIQUE [索引名] (字段名)
- 创建普通索引:ADD INDEX [索引名] (字段名)
DROP系列:
- DROP PRIMARY KEY -- 删除主键(删除主键前需删除其AUTO_INCREMENT属性)
- DROP INDEX 索引名 -- 删除索引
- DROP FOREIGN KEY 外键 -- 删除外键
- 删除一列:ALTER TABLE 表名 DROP 列名;
改系列:
- 修改列(修改列的类型长度及约束):ALTER TABLE 表名 MODIFY 列名 类型(长度) [约束];
- 修改列名:ALTER TABLE 表名 CHANGE 旧列名 新列名 类型(长度) [约束];
表的查(Read)操作
查看数据库中的所有表:
SHOW TABLES;
SHOW TABLES[ LIKE 'pattern']
SHOW TABLES FROM 表名
显示表创建时的命令:SHOW CREATE TABLE 表名
查看表的所有列:SHOW COLUMNS FROM 表名
查看表结构:格式:DESC 表名;
- Field : 字段名称.
- Type : 字段类型.
- Null : 是否允许未空,yes表示允许.
- Key : 索引.
- Default : 默认值, NULL表示默认为NULL.
- Extra : 额外属性.
约束
作用:
- 对表中的数据进行限制,保证数据的正确性、有效性和完整性。
- 一个表如果添加了约束,不正确的数据将无法插入到表中。
分类:
- 主键约束:primary key (默认就是唯一非空的)
- 非空约束:not null
- 唯一约束:unique
- 外键约束:foreign key
主键
主键功能:
- 是用于标识当前记录的字段。
- 它的特点是非空,唯一,不能有重复。
- 在开发中一般情况下主键是不具备任何含义,只是用于标识当前记录。
- 一张表只能有一个字段为主键
添加主键:
1. 在创建表时创建主键,在字段后面加上primary key.
CREATE TABLE 表名(
id INT PRIMARY KEY,
.......
)
2. 在创建表时创建主键,在表创建的最后来指定主键
CREATE TABLE 表名(
id INT,
.......,
PRIMARY KEY(id)
)
- 表后创建主键:ALTER TABLE 表名 ADD PRIMARY KEY(字段);
- 删除主键:ALTER TABLE 表名 DROP PRIMARY KEY;
- 主键自动增长:一般主键是自增长的字段,不需要指定。实现添加自增长语句,主键字段后加AUTO_INCREMENT(只适用MySQL)
- 修改表的自主增长:
ALTER TABLE 表名 AUTO_INCREMENT = 10;
ALTER TABLE 表名 MODIFY id INT; //修改自动增长字段的属性即可
非空约束
在创建表时添加约束:
CREATE TABLE 表名(
pid INT,
pname VARCHAR(20) NOT NULL --约束pname字段为非空
);
删除非空约束(本质上是修改字段属性):ALTER TABLEB 表名 MODIFY 新的约束语句;
在创建表后,添加非空约束:ALTER TABLE 表名 MODIFY 修改后有约束性的语句;
唯一约束
创建表时添加唯一约束:
CREATE TABLE 表名(
pid INT,
pnumber VARCHAR(20) UNIQUE --添加唯一约束
);
删除唯一约束:ALTER TABLE 表名DROP INDEX 列名;
在表创建后添加唯一约束:ALTER TABLE 表名MODIFY 修改后有约束性的语句;
外键
对外键的理解:
- 有些时候,一个事物的描述项(属性)太多了,或者说具体需求需要把一个事物的属性分成两个表;
- 那么如何把这两个表,当做是一张表一样呢,答案是外键;
创建外键:
法一:在创建表时就创建外键
CREATE TABLE person(
FOREIGN KEY(从表外键字段) REFERENCES 主表(主表主键);
);
法二:在创建表后添加外键
ALTER TABLE 从表 ADD [CONSTRAINT `外键名`] FOREIGN KEY(从表外键字段) REFERENCES 主表(主表主键);
删除外键:ALTER TABLE 从表名 DROP FOREIGN KEY 外键名称;
外键不允许修改, 只能删除后再添加外键
操作表中数据
表数据增
向表中添加一行数据:
INSERT INTO 表 (列名1,列名2,列名3..) VALUES (值1,值2,值3..); --向表中插入某些列
INSERT INTO 表 VALUES (值1,值2,值3..); --向表中插入所有列
INSERT INTO 表名 (列名1,列名2,列名3) VALUES (值1,值2,值3),(值1,值2,值3) --写入多行
- 插入的数据应与字段的数据类型相同
- 数据的大小应该在列的长度范围内
- 在values中列出的数据位置必须与被加入列的排列位置相对应
- 除了数值类型外,其它的字段类型的值必须使用引号引起。
- 如果要插入空值,可以不写字段,或者插入 null。对于自动增长的列在操作时,直接插入null值即可。
- 其中,INSERT可以替换为REPLACE;
表数据删
删除表中一条记录:
- DELETE FROM 表名 [WHERE 条件]; 一条一条删除,不清空auto_increment记录数
- TRUNCATE TABLE 表名; 直接将表删除,重新建表,auto_increment将置为零,从新开始
表数据改
修改表数据:
UPDATE 表名 SET 字段名=值,字段名=值;
UPDATE 表名 SET 字段名=值,字段名=值 WHERE 条件;
- 列名的类型与修改的值要一致.
- 值如果是字符串或者日期需要加引号:’’
- 修改值得时候不能超过最大长度.
修改默认值:
alter table 表名 alter column 字段名 set default 默认值;
表数据查
完整的数据查询:
SELECT [选项] 字段列表 FROM 数据源 WHERE条件 GROUP BY分组 HAVING条件 ORDER BY排序 LIMIT限制;
查询指定字段信息:select 字段1,字段2,...from 表名;
查询表中所有字段:select * from 表名;
注意:使用"*"在练习、学习过程中可以使用,在实际开发中,不推荐使用。原因,要查询的字段信息不明确,若字段数量很多,会导致查询速度很慢。
distinct用于去除重复记录:select distinct 字段 from 表名;
表别名格式:
- select * from 表名 as 别名;
- select * from 表名 别名; --as关键词可以省略
列别名格式:
- select 字段名 as 别名 from 表名;
- select 字段名 别名 from 表名;
去重复的结果集:
SELECT DISTINCT * FROM 表名;