数据库中5种约束:
prmary key 主键约束、简称pk,可以是一个字段也可以是多个字段(联合主键)
作用:用于区分同一张表中不同的记录,作为唯一标识符,主键自带唯一约束
AUTO_INCREMEN自增T:非空NOT NULL 唯一约束UNIQUE
CREATE TABLE DD(
ID INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(200) NOT NULL UNIQUE,
)
foreign key外键约束、简称fk
作用:建立表与表中的联系,目的是控制存储在外键表中的数据,使两张表形成关联,外键只能引用外表中列的值(字段)两张表存在关联关系,如果一张表的某一个字段引向另一张表的主键,称为外键 被指向的表(主表) 负责指向的表(子表)
添加数据得到时候先添加主表,删除数据的时候先删除从表
not null非空约束(列级)、
unique唯一约束(不能重名) ‘name’ VARCHAR(200) NOT NULL UNIQUE 就是name不能重名
check检查约束:‘id’ INT NOT NULL CHECK(id>0) id要大于0
CRUD
create:添加
Retrieve:查询
update:修改
delete:删除
修改表结构 alter、table:
增加字段:ALTER TABLE 表名 ADD(字段列表 数据类型 ) ALTER TABLE dd ADD(name VALUES(200))
修改字段:ALTER TABLE 表名 MODIFY 字段 ALTER TABLE dd MODIFY name VARCHAR(200)数据类型
删除字段:ALTER TABLE 表名 DROP 字段 ALTER TABLE dd DROP name
显示表结构:DESC 表名 DESC dd
清除表结构:DROP TABLE IF EXISTS 表名 DROP TABLE IF EXISTS dd
判断是否存在:IF NOT EXISTS 既如果不存在 IF EXISTS 如果存在
复制表结构:CREATE TABLE 需要添加进去的表 AS SELECT * FROM 被复制的表 WHERE 1=0(如果需要指定的字段就把换了)
复制表结构和数据:CREATE TABLE 需要添加的表 AS SELECT * FROM 被复制的表 (如果需要指定的字段就把换了)
只复制指定的字段:RELEASE TABLE 需要被添加的表 AS SELECT 字段名1,字段名2 FROM 被复制的表名 WHERE 1=0
只复制指定的字段及数据:RELEASE TABLE 需要被添加的表 AS SELECT 字段1, 字段2 FROM 被复制的表
只添加第一行表数据:RELEASE TABLE 被添加的表 AS SELECT 字段1,字段2 FROM 被复制的表 WHERE sid=1
只添加非第一行的:RELEASE TABLE 被添加的表 AS SELECT 字段,字段2 FROM 被复制的表 WHERE sid != 1
DDL:数据库定义语言:数据库对象的、创建、删除、修改、表、视图
创建数据库语法:CREATE DATABASE 数据库名
删除数据库:DROP DATABASE 数据库名
创建表: CREATE TABLE 表名2(
字段 INT(9) KEY
);
删除表:DROP TABLE 表名
DML数据操作语句:
添加insert:INSERT INTO 表名(字段名1,字段名2) VALUES(数据1,数据2) INSERT INTO onejo(id,name) VALUES(3,‘乔鲁诺’) *列名可以省略,因为默认包含所有列表、主键设置自动递增可以用null来代替自动递增的字段
多行插入:INSERT INTO 表名 VALUES(1,‘sd’),(2,‘fd’) 也可添加‘’字符串,表示有数据但是没内容
将一个表特定的数据复制到另一张表(id为1和2的所有数据) INSERT INTO twojo SELECT * FROM onejo WHERE id IN (1,2)
删除delete:DROP TABLE 表名 删除表与数据(当不需要该表的时候才使用这个) DELETE FROM 表名 这个只删除数据不删除表(可以删除指定的东西加上WHERE) TRUNCATE TABLE 表名 这个语法删除表中的所有数据,会把表中的递增给清0
更新(修改)update:UPDATE 表名 SET name=‘约瑟夫’ WHERE id = 1 注意:不加WHERE就是修改表中所有数据
DQL数据库查询语句:
查询年龄为10岁的生日:SELECT * FROM jojo WHERE YEAR(NOW())-YEAR(brith) IN 10
把一个人的工资下降1000:UPDATE jojo SET privr = price-1000 WHERE name = ‘指定被降薪的人’
表与表之间的关系:一对一、一对多、多对多
语法总顺序:Select 列名 from 表名 where 条件 group by分组 Having条件(分组之后的) oeder by列 筛选[asc/desc] Limit0,10
简单查询:没有条件 select * from 表名 代表查询所有、想要查询指定的列就把换成列名 AS显示列别名
运算符:null参与的运算,结果都为null
ifnull(expr1,expr2):如果第一个参数为空那么返回第二个参数,反之就返回第一个SELECT id,name+IFNULL(name,0) FROM onejo
decimal(8,2) 一共八位,小数点两位
算数运算符:+ - * /
关系运算符:= != < > <= >=
逻辑运算符:nut(!) and(&&) or(||)
位:& |
区间:Between…and… not Between…and…
模糊查询:not like like %匹配0或多个 _匹配一个
在范围内:in() not in()
一般作用在where后面当条件
多条件查询
查询关键字:like、or、in、not in、between and、binary、isnull、is not null、exists、not exists
like(not like) 查询数据中包含那些东西的:SELECT * FROM 表名 WHERE 名字列 LIKE ‘%王%’ 查询名字列中带有王字的
%a:以a结尾、a%以a开头、%a%包含a的、_a结尾是a、a_开头是a、a:a在中间
or(或者):SELECT * FROM onejo WHERE id=1 OR id=2 查询id是1或者是2的人的所有信息
in(not in):可以用来批量删除、修改、查询:SELECT * FROM onejo WHERE id IN (1,2,3) 查询id为123的人的信息
exists(not exists)检查行的存在:SELECT * FROM 表 WHERE EXISTS(返回结果) 为null就不返回结果
bettween and(列 >= 值 and 列 <=值):SELECT * FROM onejo WHERE id BETWEEN 1 AND 5 id在1和5之间的所有信息
not between and:不在这个区间的
binary区分大小写:SELECT * FROM 表名 WHERE BINARY name LIKE ‘i%’
is null(is not null)为空:SELECT * FROM onejo WHERE id IS NULL
all 所有 any 任意一个
排序查询order by:
中文排序conver:SELECT * FROM onejo WHERE ORDER BY CONVERT(name USING gbk) DESC
按照某个列进行排序:升序:asc 降序:desc
语法:SELECT * FROM 表名 WHERE 条件 ORDER BY 列名 升序或降序
MySQL中的常用函数:
数值:abs(n):返回指定数字的绝对值 PI:圆周率 sqrt(n)返回指定数字的平方分 ceil()向上取整 floor()向下取整
round(n,[d])四舍五入 truncate(n,d)截取函数 mod(n,n1)取余(不是除法,是取余)
字符:concat():字符串拼接SELECT CONCAT(‘sds’,‘sd’,‘sd’) length():返回字符串长度 一个汉字三个字节
substring(str,poy,len)原始字符串,从哪开始截取,截取长度 SELECT SUBSTRING(‘dfsfsdfsdfs’,5,2) = substr(str,poi,len)
char_length() 返回长度 一个汉字一个字节 instr(str,n)查找该字符串是否包含n char()将指定的ascii码转成字符
ascii()将字符转换为ascii码 replace(‘sss’,s,z)将所有的s换成z trim()去除两端指定的字符包含空格
ltrim()去除左边的空格 rtrim()去除右边的空格 left(str,n) 返回字符串左边指定个数的字符 right(str,n)返回右边指定
LPAD(str,len,padStr) 在指定字符的左边填充指定字符 (len是填充之后的长度) RPAD(str,len,padStr)填充右边
FIND_IN_SET(str,strlist)str要查询的字符串,strlist字段名 多个的话用逗号隔开 查询字段strlist包含str的结果
截取字符串:MID() SUBSTR() FEFT() RIGHT() 上面有记录
insert(str,poi,len,newStr) 指定位置插入字符串 或是删除 str指定字符串poi被替换的位置 new新的字符串 删除的话直接放 ’ ’
显示姓李的员工:SELECT * FROM onejo WHERE name LIKE ‘李%’
SELECT * FROM onejo WHERE SUBSTR(name,1,1) = ‘李’
SELECT * FROM onejo WHERE INSERT(name,‘李’) = 1
显示正好有两个字的员工信息:SELECT * FROM onejo WHERE CHAR_LENGTH(name) = 2
SELECT * FROM onejo WHERE name LIKE ‘__’
date_format()日期转成字符串 str-to-date() 字符串转时间