目录
SQL语言包括四个部分:
DML(数据操作语言):
用来操作数据库中所包含的数据[用来插入,修改和删除表中的数据 insert,update,delete]
DDL(数据定义语言):
用于创建和删除数据库对象等操作[create,drop,alter]
DQL(数据查询语言):
用来对数据库中的数据进行查询[select]
DCL(数据控制语言):
用来控制数据库组建的存取许可,存取权等[DRANT,COMMIT,ROLLBACK]
1.数据库相关语句
1.创建数据库:格式
create database 数据库名称;
2.查看数据库详情
show create database 数据库名称;
3.创建数据库时指定字符集
create database 数据库名 character set 字符集(utf-8或gbk);
4.删除数据库
drop database 数据库名;
5.查询所有数据库
show databases;
2.数据库表相关
1.查询所有表
show tables;
2.创建表
create table 表名(字段1名+类型,字段2名+类型)
创建原理
表的引擎:
InnoDB :支持数据库高级操作,如:外键,事务等------默认引擎
myisam:只支持基础的增删改查
3. 创建表时指定表的引擎和字符集格式:
create table数据库名(字段名1,字段1的类型,字段名2,字段2的类型...)
engine=myisam/innDB default charset gbk/utf8;
4.查看表的字段
desc +表名;
案例:创建一个学生表(student),字段为学号(id),姓名(name),语文成绩(Chinese),数学成绩(math),
英语成绩(English)
create table student(id int,name varchar(10),...
5.删除表:
drop table+表名
案例
代码 | 作用 |
修改表名 | rename table 表名 to 新表名 |
添加表字段 | alter table 表名 engine=myisam/innDB default charset gbk/utf8 |
添加表字段 | alter table 表名 add 字段名 字段类型 位置(first/after xx) |
删除表字段 | alter table 表名 drop 字段名 |
修改表字段名和类型 | alter table 表名 change 字段名 新字段名 字段;类型 |
删除表 | drop table 表名 |
3数据相关的SQL
插入数据
(1). 全表插入--格式
insert into 表名 values(字段1的值,字段2的值,字段3的值...)
注! :每个字段都赋值,顺序要与表字段一致
(2) .指定插入--格式
insert into 表名(字段名1,字段名2..)values(字段1值,字段2值..);
如果添加中文需在客户端输入:set names gbk
(3) .批量插入--格式
insert into 表名 values(字段1的值,字段2 的值,字段三的值.....
添加字段
添加表的字段格式
在字段的最后添加:alter table 表名 add 字段名 字段类型;---默认
在字段最前面添加:alter table 表名 add 字段名 字段类型 first;
在XXX字段的后面添加:alter table 表名 add 字段名 字段类型 after XXX;
更新(修改)数据
(1) 修改数据--格式:
update 数据表名称 set 条件;
注:未加条件则全部修改
(2)按条件修改数据--格式
update 数据表名称 set 修改内容 where 条件;
2修改表名
rename table 表名 to 新表名
2.修改表的引擎和字符集
Alter table 表名 engine=myisam charset=gbk;
3.修改表的字段名和类型
alter table 表名 change 原字段名 新字段名 类型
删除数据
1.删除表字段--格式
alter table +表名 drop 表字段
2.删除表中数据按条件-
delete from 表名 条件
3删除全部数据--格式
delete from 表名 #把表的内容全部清空,一条数据一条数据的删
3.1截断表--格式
truncate table 表名 #截断表:直接删除原来的表,重新创建一个表,执行速度比delete快
4.删除表
drop table 表名
drop是对表结构进行删除的,可以删除一个字段,或者删除一张表
delete 是对表数据进行删除的
案例
创建员工表(emp)字段有id和name,如果有先删除
create table emp(id int,name varchar(10));
修改emp表的引擎为myisam 字符集为gbk
alter table emp engine=myisam charset=gbk;
修改表名为t_emp
rename table emp to t_emp;
给t_emp添加age字段在id字符段后面
alter table t_emp add age int after id;
给t_emp添加工资sal字段在最后
alter table t_emp add sal int;
修改sal字段名称为salary
alter table t_emp change sal salary int;
修改age字段到salary字段的后面
alter table t_emp modify age int after salary
删除salary字段
alter table t_emp drop salary;
删除t_emp
drop table t_emp;
4.约束
1.主键约束
列级主键约束
给主键添加约束,起到非空并且唯一的作用,主键指代的是表示数据唯一性的字段,一张表中只有一个主键.
SQL语句设置主键 : primary key
create table 表名(id int primary key,name varchar(10));
表级主键约束案例:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id) --表级主键可以为多个
)
当表已被创建时,创建 PRIMARY KEY 约束,请使用下面的 SQL:
ALTER TABLE Persons
ADD PRIMARY KEY (主键字段);
撤销PRIMARY KEY 约束
ALTER TABLE 表名
DROP PRIMARY KEY
2.主键约束+自增
SQL语句实现: auto_increment
create table t2(id int primary key auto_increment,name varchar(10));
自增的总结:
表现自增的数值,只增不减.
清空表的数据 主键数值不归零 继续增长
数值以出现最大值的基础+1
3.外键约束:
外键是两表或多表之间建立一个关系,我们将这种关系叫做外键关系
表关系: 多对一、多对多 、一对一
多对一的外键需要添加到多的一方。
多对多的外键添加到中间表中(无主键)分别创建外键关联
一对一主表的主键是从表的外键,且从表的外键指定到从表的主键上
添加外键语法一:
FOREIGN KEY (本表字段(列名)) REFERENCES 连接表名(连接表字段(主键))
添加外键语法二: 在已经建完表的基础上添加外键
alter table 表名 add constraint foreign key(列名) references 主表(主键)
一对一
人(person) 身份证(id_card)
人表:
create table person_idcard(
pid int(10)PRIMARY KEY AUTO_INCREMENT,
name varchar(20),
sex varchar(5)
)
身份证表:
create table id_card(
cid int(10)PRIMARY KEY ,
id_number varchar(20)
FOREIGN KEY (cid) REFERENCES person_idcard(pid)
)
一对多
人表:
CREATE TABLE Persons(
p_id INT,LastName VARCHAR(25),
FIRST VARCHAR(10),
city VARCHAR(10),
PRIMARY KEY (p_id))
“订单”表:
CREATE TABLE Orders
(
O_Id INT NOT NULL,
OrderNo INT NOT NULL,
P_Id INT,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
==请注意==,“Orders” 表中的 “P_Id” 列指向 “Persons” 表中的 “P_Id” 列。
“Persons” 表中的 “P_Id” 列是 “Persons” 表中的 PRIMARY KEY。
“Orders” 表中的 “P_Id” 列是 “Orders” 表中的 FOREIGN KEY。
多对多
创建学生表
CREATE TABLE choose_student(
sid INT(10)PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(50),
sex CHAR)
#创建课程表
CREATE TABLE choose_course(
cid INT(10)PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(50),
credit DOUBLE
)
中间表,:学生号与选择的课程号一目了然
#中间表
CREATE TABLE student_course
(
sid INT(10),
cid INT(10),
FOREIGN KEY (sid) REFERENCES choose_student(sid),
FOREIGN KEY (cid) REFERENCES choose_course(cid)
)
5.注释
comment
注释:可以在创建表添加字段的时候对字段进行介绍,便于以后查看表的时候知道每个字段的作用
使用:
Create table t4(id int primary key auto_increment comment‘这是主键,name varchar(10)
comment’这是姓名’);
*Truncate,delete,drop的区别*
\1. delete :删除表中数据,自增数值不清零---支持事务
\2. Drop:删除表---不支持事务
\3. Truncate:删除表并创建一个新表,自增数值清零--不支持事务
6.数据库的数据类型
五种数据类型分别为:
整数
浮点数
字符串
日期
其他
整数
常用:int(m) bigint(m):m代表显示长度如果数据长度不足m时会在数值前面补0,但是必须和zerofill关键字结合使用,使用方式如下:
Create table t_int(num int(10)zerofill);
浮点数
常用:double(m,d):m代表总长度,d代表小数长度,使用方法如下:
create table t_double (num double(5,3));
Insert into t_double values(12.34567);
Insert into t_double values(1.23);
select * from t_double;
Decimal(m,d):m代表总长度,d代表小数长度,超高精度小数,需要涉及超高精度运算的时候使用
字符串
Char(m):m代表字符长度,固定长度,执行效率高(不用改变长度),最大长度255
Varchar(m):可变长度,会根据内容长度改变自身长度,更节省资源,最大长度65535,如果长度超过255建议使用text
Text:可变长度,记录大量文本时使用,最大值65535
日期
date只能保存 年月日
time只能保存 时分秒
Datetime:保存年月日 时分秒,默认值null,最大值9999年12月31日
Timestamp:保存年月日 时分秒,默认值为当前系统时间,最大值2038年01月19日
案例
Create table t_date(t1 date,t2 time,t3 datetime,t4 timestamp);
Insert into t_date values(‘2022-5-20’,null,null,null);
Select * from t_date;
Insert into t_date values(null,’09:14:12’,’2022-05-20 9:20:36’,null);
Select * from t_date;
案例
设计表保存一下数据:
1保存教学部下java部门的张老师的工资(salary)为2000年龄28 categoryid(分类id)
2集团总部下销售a部的人员李白 工资3000年龄20
创建员工表
Create table t3(id int primary key auto_increment,name varchar(10),salary double,age int,categoryid int) ;
创建分类表
Create table t4(id int primary key auto_increment,name varchar(10),parent_id int) ;
插入java部门的张老师的工资(salary)为2000年龄28 categoryid(分类id)
Insert into t4 values(null,’教育部’,null);
Insert into t4 values(null,’java部门’,1);
Insert into t3 values(null,’张老师’,2000,28,2);
插入集团总部下销售a部的人员李白 工资3000年龄20 添加上级id的字段(parent_id)
Insert into t4 values(null,’集团总部’,null);
Insert into t4 values(null,’销售a部’,4);
Insert into t3 values(null,’李白’,3000,20,5);