结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
分四大类:
DDL:数据定义语言(数据库及数据库对象的创建、修改、删除)create alter drop
DCL:数据控制语言(权限控制)授权和收回权限 grant revoke
DML:数据操作语言 (对数据表中的数据进行增删改操作) insert delete update
DQL:数据查询语言(对数据表中的数据进行查询操作)select
- 创建数据库
语法结构:create database [if not exists] 数据库名;
eg:
-- 创建数据库
CREATE DATABASE IF NOT EXISTS school;
-- 创建表之前一定要选择操作数据库
USE school;
2.创建表
语法结构:
CREATE TABLE 表名
(
字段名 数据类型 约束说明,
字段名 数据类型 约束说明,
......
字段名 数据类型 约束说明
);
mysql中的数据类型 :
数值类型: 整数(tinyint smallint int bigint) 浮点型(float double )
字符类型:char(10) varchar(10) 一个汉字占两个字节
char:固定长度类型 char(10)
varchar:可变长度类型varchar(10)
日期类型:date(yyyy-MM-dd) datetime (yyyy-MM-dd hh:mm:ss)
eg:
-- 在school数据库中创建学生表student
CREATE TABLE student
(
sid INT ,
sname VARCHAR(20),
sgender CHAR(2),
semail VARCHAR(40)
);
-- 查看表结构
DESC student;
-- 查看创建表的文本信息(源码)
SHOW CREATE TABLE student;
3.修改表结构
-- alter命令 修改
-- 如何对表结构进行修改
-- 1.向表中添加新字段
ALTER TABLE student ADD sage INT AFTER sname;-- 在表格末尾加新列
ALTER TABLE student ADD saddr VARCHAR(100) AFTER semail;-- 在指定的列后面加新列
ALTER TABLE student ADD id INT FIRST;-- 在第一个字段的前面加新列
-- 2.删除字段
ALTER TABLE student DROP id;
ALTER TABLE student DROP sage;
-- 3.修改字段
-- modify只能修改字段的属性信息,不能改名
ALTER TABLE student MODIFY sgender CHAR(20);
-- change既可以修改字段名,还可以改属性信息
ALTER TABLE student CHANGE sgender ssex CHAR(2);
-- 4.修改表名
ALTER TABLE stu RENAME student;
-- 5.修改表的编码格式
SHOW CREATE TABLE student;
ALTER TABLE student CONVERT TO CHARACTER SET 'utf8';
4.删除命令
-- 删除表
DROP TABLE 表名;
-- 删除数据库
DROP DATABASE 库名;
- 约束
约束:为了保证表中数据的完整性,给表添加的一些限制。
完整性:准确性 正确性
数据库完整性类型:
实体完整性:行方向记录与记录之间不能出现重复数据,冗余:重复。
域完整性:列方向符合一些规范。数据类型约束、默认约束
引用完整性:限制两个表之间关系,通过外键约束来完成
自定义完整性:存储过程 和 触发器来完成。
约束类型:
- 主键约束:primary key (实体完整性)
一个表中最多有一个主键,作为主键的列不允许出现重复数据,同时该列自动非空。
- 唯一约束:unique(实体完整性)
一个表中可以有多个,设置唯一约束的列不允许出现重复数据,但是允许为空,空值最多只有一个。
- 非空约束:not null(域完整性),创建表的同时添加
- 默认值约束:default(域完整性)
设置了默认约束的列,当不给值是就用默认值填充。
- 外键约束:foreign key (引用完整性)
给表添加约束有两种方式,一种是在创建表的同时添加约束,另一种是先创建表结构,再通过修改表的方式给表添加约束。
方式一:创建表的同时添加约束
-- 创建班级表
CREATE TABLE grade(
gid INT PRIMARY KEY ,
gname VARCHAR(20) UNIQUE NOT NULL
);
-- 创建带有约束的表
CREATE TABLE student(
sid INT PRIMARY KEY,-- 主键约束 要求学号唯一且不允许为空
gid INT,-- 关联的班级编号,与grade表中的gid建立外键关系
sname VARCHAR(20) UNIQUE NOT NULL,-- 唯一约束 要求姓名唯一 非空约束,姓名不允许为空
sgender CHAR(2) DEFAULT '男' NOT NULL,-- 性别的默认值是男 且不允许为空
sage INT DEFAULT 20 NOT NULL,-- 年龄默认20 且不允许为空
saddr VARCHAR(100),
FOREIGN KEY(gid) REFERENCES grade(gid)-- 外键约束 学生表的gid与班级表gid产生关联
);
-- 方式二:先创建表结构再添加约束
DROP TABLE student;
-- 创建表结构
CREATE TABLE student(
sid INT NOT NULL,
gid INT,
sname VARCHAR(40) NOT NULL,
sgender CHAR(2) NOT NULL,
sage INT NOT NULL,
saddr VARCHAR(100)
);
SHOW CREATE TABLE student;
-- 给表添加约束
-- 添加主键约束
ALTER TABLE student ADD PRIMARY KEY(sid);
-- 删除主键约束
ALTER TABLE student DROP PRIMARY KEY;
-- 添加唯一约束
ALTER TABLE student ADD UNIQUE(sname);
-- 删除唯一约束
ALTER TABLE student DROP KEY sname;
-- 添加默认约束
ALTER TABLE student ALTER sgender SET DEFAULT '男';
-- 删除默认约束
ALTER TABLE student ALTER sgender DROP DEFAULT;
-- 添加外键约束
ALTER TABLE student ADD FOREIGN KEY (gid) REFERENCES grade(gid);
-- 删除外键约束
ALTER TABLE student DROP FOREIGN KEY student_ibfk_1;
ALTER TABLE student DROP KEY gid;
自增列:
- 自动增长,默认从1开始
- 用户插入数据时可以不给值
- 必须是整型才可以设置自增列
- 设置自增列的字段必须是主键,自增列的编号不能重复
eg:
-- 将学号sid设置为自增列
ALTER TABLE student MODIFY sid INT AUTO_INCREMENT;
-- 设置自增列的初始值
ALTER TABLE student AUTO_INCREMENT=1000;
- DML
- 添加数据insert
1)insert into 表名(字段名1,字段名2,........)
values(值1,值2,......);
INSERT INTO student
VALUES(1001,1,'张三','男',23,'北京海淀区');
INSERT INTO student(gid,sname,sgender,sage,saddr)
VALUES(2,'李四',DEFAULT,24,'河北唐山');
- insert into 表名 set 字段名=值, 字段名=值,........
INSERT INTO student SET gid=1,sname='王五',sage=25;
- 多行插入
INSERT INTO student(gid,sname,sgender,sage,saddr)
VALUES
(1,'翠花','女',21,'河北保定'),
(3,'武松',DEFAULT,45,'山东梁山');
- 修改数据update
update 表名 set 字段名=新值,字段名=新值..... where 修改条件;
eg:
SELECT * FROM student;
UPDATE student SET saddr='北京朝阳区' WHERE sname='王五';
UPDATE student SET sname='李四四',sgender='女'
WHERE sid=1002
- 删除数据delete
delete from student 删除表的全部数据
delete from student where 删除条件;
eg:
DELETE FROM student WHERE gid=1;
DELETE FROM grade WHERE gid=1;
DELETE FROM student;
DELETE FROM grade;
带有主外键关系的表在添加和删除数据时需要注意的问题:
- 添加数据时,要先向主表中添加数据,再向子表中添加数据
- 删除数据时,要先删除子表的数据,再删除主表的数据
truncate 删除表的全部数据
truncate table 表名;
delete 与 truncate区别:
- delete既可以根据条件删除,也可以删除全部数据,而truncate只能全删,truncate后面不能跟where 条件。
- delete删除数据后,表中的自增列不会从头开始,truncate删除后自增列会从头开始。
- delete在删除带有主外键关系的表数据时,遵循先删除子表再删除主表的原则;truncate不删除带有主外键关系的主表中的数据。
- 当删除全部数据时,truncate的效率会比delete高。