1.mysql是什么?
mysql本质就是一个c/s架构的套接字软件2.数据库基本概念
数据库服务器:运行有数据库管理软件的计算机 数据库管理软件:mysql 库:文件夹 表:文件 记录:文件中的一行的内容3.针对库、表、记录的操作
3.1 库\文件夹: 增: CREATE DATABASE 库名 CHARSET 编码; 改: ALITER DATABASE 库名 CHARSET 编码; 查: SHOW DATABASES; SHOW CREATE DATABASE 库名; 删: DROP DATABASE 库名; 3.2 表\文件: 操作表前要先切换到库下:use 库名; 建表的完整语法: CREATE TABLE 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); 增: CREATE TABLE 表名(字段名 类型,...); 改: 改字段类型\约束条件: ALTER TABLE 表名 modify 字段名 类型(长度\宽度); 改字段名\类型\约束条件: ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度\宽度); 查: 查看所有表: SHOW TABLES; 查看指定表: SHOW CREATE TABLE t1; 查看表结构: DESC 表名; 删: DROP TABLE 表名; 清空表: TRUNCATE 表名; #清空表应该使用TRUANCATE,不仅删除所有记录,而且将自增字段的值归0 3.3 记录\文件中一行行内容: 增: 方式一(指定字段名插入): INSERT INTO 表名 (字段名,字段名,...) VALUES (值1,值2,...),...; 方式二(默认位置插入): INSERT INTO 表名 values (值1,值2,...),...; 改: UPDATE 表名 SET 字段名=内容 where 条件; 查: SELECT 字段名 FROM 表名; 删: DELETE FROM 表名 WHERE 条件; #DELETE 只能用于删除符合条件的某几条记录,不能用于清空表4.存储引擎 存储引擎就是表的类型 不同的类型会对应不同的处理机制 测试: CREATE TABLE t3(id INT)ENGINE='InnoDB'; CREATE TABLE t4(id INT)ENGINE='MyISAM'; CREATE TABLE t5(id INT)ENGINE='BLACKHOLE'; CREATE TABLE t6(id INT)ENGINE='MEMORY'; INSERT INTO t3 VALUES(1); INSERT INTO t4 VALUES(1); INSERT INTO t5 VALUES(1); INSERT INTO t6 VALUES(1);5.数据类型
PRIMARY #主键(不能为空的意思) AUTO_INCREMENT #自动增长 DEFAULT #默认值 5.1 数字类型:整型(默认有符号),浮点型 类型设置成无符号:unsigned #整型类型:数据类型宽度限制的是显示宽度而非存储宽度 整型: TINYINT #占1字节 SMALLINT #占2字节 MEDIUMINT #占3字节 INT #占4字节 BIGINT #占8字节 浮点型: FLOAT #占4字节 DOUBLE #占8字节 DECIMAL #手动指定字节 5.2 字符类型: CHAR_LENGTH(字段名) #用于查看某字段包含的字符个数CHAR #定长
VARCHAR #变长 例: CHAR(5) 相同点:最大能存放5个字符 不同点:假设传入3个字符,会补全2个字符 #注意: 针对CHAR类型,在存放时会将字符补全为5个,在查询时又会将末尾补全的空格去掉 不让MySQL去掉末尾空格的方法: 通过修改sql_mode,添加 SQL_PAD_CHAR_TO_FULL_LENGTH VARCHAR(5) 相同点:最大能存放5个字符 不同点:假设传入3个字符,就存3个字符 LIKE: WHERE 字段名 LIKE LIKE是模糊匹配 %:任意个数的任意字符 _:1个任意字符 大文本类型: TEXT系列(文本是带有编码) TINYTEXT TEXT MEDIUMTEXT LONGTEXT BLOB系列(也是字符数据,但是不带编码) TINYBLOB BLOB MEDIUMBLOB LONGBLOB 二进制类型: BINARY系列(存储二进制数据) BINARY VARBINARY 5.3 日期类型:TIME,DATE,DATETIME,TIMESTAMP,YEAR, NOW() #此函数用于获取当前时间 5.4 枚举类型: ENUM #多选一 5.5 集合类型: SET #多选多 6.表操作之约束条件 约束条件:约束条件是在类型之外为字段附加的限制 强调:如果表的类型为InnoDB储存引擎,在创建表时,必须定义一个主键 如果不指定,InnoDB存储引擎会自上而下寻找一个不为空且唯一的字段当做主键 如果不指定并且也没有NOT NULL+UNIQUE的字段,那么InnoDB存储引擎会生成一个隐藏的字段当做主键 PRIMARY KEY #标识该字段为该表的主键,可以唯一的标识记录 单从约束角度去看,主键的约束效果是NOT NULL+UNIQUE FOREIGN KEY #标识该字段为该表的外键 限制关联表某一个字段的值必须是来自于被关联表的一个字段 注意: 1.被关联的字段必须是一个KEY,通常是ID字段 2.创建表时:必须先建立被关联的表,才能建立关联表 3.插入记录时:必须先往被关联的表插入记录,才能往关联表中插入记录 #关联表 CREATE TABLE emp( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(15), age INT, dep_id INT, FOREIGN KEY(dep_id) REFERENCES dep(id) ON UPDATE CASCADE ON DELETE CASCADE ); INSERT INTO emp(name,age,dep_id) VALUES ('hades',18,1), ('iggy',28,2), ('egon',38,2), ('alex',30,1), ('xingchen',18,3); #被关联表 CREATE TABLE dep( id INT PRIMARY KEY AUTO_INCREMENT, dname VARCHAR(20), info VARCHAR(50) ); INSERT INTO dep(dname,info) VALUES ('IT','技术部门'), ('Sale','销售部'), ('HR','人事部'); #ps:删除时,应该先删除关联表emp中的记录,再删除被关联表对应的记录 NOT NULL #标识该字段不能为空 UNIQUE KEY #标识该字段的值是唯一的 AUTO_INCREMENT #标识该字段的值自动增长(整数类型,而且为主键) DEFAULT #为该字段设置默认值 UNSIGNED #无符号 ZEROFILL #使用0填充 #找两张表关系的窍门 emp dep #1.先站在左边的角度去找左表emp的多条记录能否对应右表dep的一条记录 翻译:多个员工能否属于一个部门 #2.然后站在右表的角度:去找右表dep的多条记录能否对应左表emp的一条记录 翻译:多个部门能否拥有同一名员工 #多对一结果的判断 1.如果只有单向多对一成立,最终关系就是多对一 2.在emp表新增一个字段dep_id,该字段外键关联dep(id) #多对多结果的判断 1.双向的多对一就是多对多 2.需要建立第三张表,有一个字段的值fk左表,一个字段的值fk右表 CREATE TABLE author( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(16), age INT ); CREATE TABLE book( id INT PRIMARY KEY AUTO_INCREMENT, bname VARCHAR(20), price INT ); CREATE TABLE author2book( id INT PRIMARY KEY AUTO_INCREMENT, author_id INT, book_id INT, FOREIGN KEY(author_id) REFERENCES author(id) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY(book_id) REFERENCES book(id) ON UPDATE CASCADE ON DELETE CASCADE ); #一对一:无需参考窍门,左表的一条数据唯一对应右表的一条记录7.表操作 1.修改表名 ALTER TABLE 表名 RENAME 新表名; 2.增加字段 ALTER TABLE 表名 ADD 字段名 数据类型[完整性约束条件...],ADD 字段名 数据类型[完整性约束条件...]; ALTER TABLE 表名 ADD 字段名 数据类型[完整性约束条件...] FIRST; ALTER TABLE 表名 ADD 字段名 数据类型[完整性约束条件...] AFTER 字段名; 3.删除字段 ALTER TABLE 表名 DROP 字段名; 4.修改字段 ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件...]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件...]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件...];5.复制表
#在查询语句前加上CREATE TABLE 表名 CREATE TABLE user SELECT host,user,password,select_priv FROM mysql.user; #复制表结构 CREATE TABLE user1 SELECT host,user,password,select_priv FROM mysql.user WHERE 3<1;8.记录的增、删、改 1.插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3...字段n) VALUES(值1,值2,值3...值n); 语法二: INSERT INTO 表名 VALUES (值1,值2,值3...值n); 2.指定字段插入数据 语法: INSERT INTO 表名(字段1,字段2,字段3...) VALUES (值1,值2,值3...); 3.插入多条记录 语法: INSERT INTO 表名 VALUES (值1,值2,值3...值n), (值1,值2,值3...值n), (值1,值2,值3...值n); 4.插入查询结果 语法: INSERT INTO 表名(字段1,字段2,字段3...字段n) SELECT (字段1,字段2,字段3...字段n) FROM 表2 WHERE ...;9.更新数据UPDATE
语法: UPDATE 表名 SET 字段1=值1, 字段2=值2, WHERE CONDITION; 示例: UPDATE mysql.user SET password=password('123') WHERE user='root' and host='localhost';10.删除数据DELETE
语法: DELETE FROM 表名 WHERE CONDITION; 示例: DELETE FROM mysql.user WHERE password='';