1.不管是啥类型的 关系型 数据库,都需要使用sql语言
2.概述:其实所有关系型数据库都要遵守的一种规范,这个规范规定了sql语句的基本组成结构,包括用什么关键字,sql语句怎么写都规定了 -> sql语言
但是所有关系型数据库都遵守sql语言规范的基础上都会有不同的语法,这些不同之处叫做sql方言
sql语言分类
-
数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
-
数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行操作。关键字:insert,delete,update等
-
数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。
-
数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等
sql中的数据类型
int | 整数类型 |
---|---|
double | 小数类型 |
decimal(m,d) | 指定整数位与小数位长度的小数类型 |
date | 日期类型,格式为yyyy-MM-dd,包含年月日,不包含时分秒 2020-01-01 |
datetime | 日期类型,格式为 YYYY-MM-DD HH:MM:SS,包含年月日时分秒 到9999年 |
timestamp | 日期类型,时间戳 从1970年到2038年 |
varchar(字符串长度) | 文本类型, M为0~65535之间的整数 |
DDL
创建数据库 -> 数据库默认字符集Latin-1,所以我们创建库的时候加上U8编码
CREATE DATABASE 数据库名 CHARSET utf8;
查看数据库
SHOW DATABASES;
删除数据库
DROP DATABASE 数据库名;
使用数据库(切换数据库)
USE 数据库名;
# 创建表
1.语法:
create table 表名(
列名 数据类型(长度) [约束],
列名 数据类型(长度) [约束],
列名 数据类型(长度) [约束]
);
2.注意:
如果在创建表的时候,最后一列下面没有其他语句了,就不要写,
# 查看所有表
show tables;
# 查看表结构
desc 表名;
# 删除表
drop table 表名
进阶
# 添加列
alter table 表名 add 列名 类型(长度) [约束];
# 修改列的类型,长度及约束
alter table 表名 modify 列名 类型(长度) [约束];
# 修改列名
alter table 表名 change 旧列名 新列名 类型(长度) [约束];
# 修改表_删除列.
alter table 表名 drop 列名;
# 修改表名
rename table 表名 to 新表名;
DML
插入数据
a.insert into 表名 (列名,列名) values (值1,值2);
/*
注意:如果数据为varchar类型,在操作数据时,数据不要加""
原因:将来我们不可能直接在mysql中写sql语句,我们要将sql语句放到
java代码中,所以将sql语句放到java代码中怎么表示?
String sql = "INSERT INTO category (cid,cname,`desc`) VALUES (1,"蔬菜","有机");"->SQL错误
所以:我们写sql语句的时候如果数据为varchar类型,请用''
String sql = "INSERT INTO category (cid,cname,`desc`) VALUES (1,'蔬菜','有机');"
*/
b.insert into 表名 (列名,列名) values (值1,值2),(值1,值2),(值1,值2)-> 一把添加多行数据
c.insert into 表名 values (值1,值2); -> 这种格式,需要将所有列的所有值都写上
删除数据
a.delete from 表名 -> 全部删除
b.delete from 表名 where 条件
修改数据
a.update 表名 set 列名 = 新值 -> 一下子修改所有的数据
b.update 表名 set 列名 = 新值 where 条件
约束
1.关键字:primary key
2.注意: a.主键列的数据不能为NULL b.主键列的数据不能重复 c.每个表都应该有一个主键,主键列的数据代表一条数据,相当于人的身份证号
创建约束
-- 1.在创建表的时候直接指定主键约束
create table 表名(
列名 数据类型(长度)[约束],
列名 数据类型(长度)[约束],
列名 数据类型(长度)[约束]
)
-- 2.在constraint约束区域,去指定主键约束
1.什么叫做constraint域
创建表的时候,最后一列和右半个小括号之间的区域
2.语法:
[constraint 名字] primary key (字段名)
3.注意:[constraint 名字]:可写可不写
-- 3.通过修改表结构的方式
1.格式:ALTER TABLE 表名 ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)
2.注意:[CONSTRAINT 名称]可以省略不写
联合主键
1.什么叫做联合主键: 多个列合称为一个主键
2.特点: 多个列中的数据不能为NULL,不能完全一样
删除主键约束
ALTER TABLE 表名 DROP PRIMARY KEY->删除主键约束
自增长约束
1.关键字: auto_increment
2.使用:都是和主键结合使用
3.特点: 主键自增长列的值,不用单独维护,会自动编号
truncate和delete区别?
delete:如果删除的是主键自增数据,再次添加不会从头编号,而是从最后一个id开始继续往下编号
truncate:摧毁表结构,删除所有数据,再次添加会重新编号
非空约束
1.关键字:NOT NULL
2.特点: 此列中的数据不能为NULL
唯一约束
1.关键字:UNIQUE
2.特点:
此列中的数据不能重复
3.唯一约束和主键约束有啥区别:
a.主键约束:每个表都应该有,能代表一条数据,每个表中只有一个
b.唯一约束:每个表中可以有多个
非空约束
1.关键字:NOT NULL
2.特点: 此列中的数据不能为NULL
唯一约束
1.关键字:UNIQUE
2.特点: 此列中的数据不能重复
3.唯一约束和主键约束有啥区别:
a.主键约束:每个表都应该有,能代表一条数据,每个表中只有一个
b.唯一约束:每个表中可以有多个