Mysql学习笔记
设置编码:set charset gbk;
进入mysql :Mysql -uroot -proot
修改mysql提示符:Shell>mysql -uroot -proot –prompt 提示符
修改mysql提示符:Mysql>prompt 提示符
提示符:D完整日期;d当前数据库;h 服务器名称u 当前用户
显示当前服务版本:select version();
显示当前时间:select now();
显示当前用户:select user();
创建数据库:create{database|schema} [if not exists] db_name [default] character set [=] charset_name;
Create database t1;
Create database if not exists t1;
Create database if not exists t2 character set utf8
查看警告信息:show warnings;
查看创建数据库所用的指令:show create database t1;
修改数据库:alter {database | schema } [db_name] [default] character set [=] charset_name;
删除数据库:drop {database | schema} [if exists] db_name;
使用数据库: use db_name;
显示当前打开的数据库: select database();
创建数据表:CREATE TABLE [IF NOT EXISTS] table_name(
Column_name data_type,
……….);
查看数据表:SHOW TABLAES [FROM db_name] [LIKE ‘pattern’|WHERE expr]
查看数据表结构:SHOW COLUMNS FROM tbl_name;
插入记录:INSERT [INTO] tb1_name [col_name,….]values(val,….);
记录查找:SELECT expr,…FROM tb_name;
AUTO_INCREMENT必须和PRIMARY KEY一起使用。
PRIMARY KEY 不一定和AUTO-INCREMENT一起使用
创建表,查看储存引擎
因为数据长度不一样,所以报错:
为符号位不同而报错:
正确操作:
显示索引:
参照列自动创建索引:
父表中插入记录:
子表中插入记录:
删除父表中的记录,发现子表也自动删除:
修改数据表
添加单列:ALTER TABLE tb_name ADD [COLUMS] col_name column_definition [FIRST|AFTER col_name]
默认为所有列的最下边:
使用AFTER clo_name:
使用FIRST:
添加多列:
ALTER TABLE tb_name ADD [COLUMN] (col_name colnmn_definition,…….)
删除列:ALTER TABLE tb_name DROP [COLUMN] col_name
添加主键约束:
ALTER TABLE tb_name ADD [CONSTRAINT [sysbol]] PRIMARY KEY [index_type] (index_col_name,…….)
先创建一个users2表:
添加id列:
将id列设为主键:
添加唯一约束:
添加外键约束:
添加或删除默认约束:
ALTER TABLE tb_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
添加默认值:
删除默认值:
删除主键约束:
ALTER TABLE tb_name DROP PRIMARY KEY
删除唯一约束:
ALTER TABLE tb_name DROP {INDEX | KEY} index_name
查看索引:
删除唯一约束:
删除外键约束:
ALTER TABLE tb_name DROP FROEIGN KEY fk_symbol
先查看约束名:
删除外键约束: 、
修改列定义:
ALTER TABLE tb_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_nam]
将id移动到最前边:
第一种方法:
第二种:
先创建一个表,普通的插入方法:
可以是表达式,自动添加的也可以设为DEFAULT:
对于有默认值额字段,也可以用DEFAULT使用默认值:
插入多条记录:
缺点,一次只能插入一条记录:
不加where所有记录都会更新:
更新多个字段:
使用where语句:
注意:删除只有再插入值,id是按所有id最大值的下一个
使用别名查询两个字段:
注意:使用第一条时,having后边的字段必须在select中
对查询结果以id的值降序排列:
对查询结果以age升序排列,相同的以id降序排列:
查询两条记录:
查询3,4两条记录:
组合使用,注意并没有id缺少6并不会影响:
先创建一个表,再讲查询的结果插入创建的表中:
当客户端显示乱码时,使用SET NAMES GBK
查询平均值:
查询平均值,并对查询的结果的平均值做四舍五入,取小数点后两位:
使用子表查询:
Any()、some()任何值,all()所有值
DESC tb_name 等价于 SHOW COLUMNS FROM tb_name
使用INSERT …….SELECT 插入记录:
利用新建的表,再更新原表
查询表结构发现,字段的类型并没有变,所以更改字段类型:
多表连接的语法:
表起别名:
多表查询:
三张表的多表查询:
无限分类数据表;
无限分类的查找,用自身连接:
左连接,查询父类下的子类数目:
查询goods_name 重复的记录:
删除重复记录:
应用:
CONCAT_WS()
FORMAT(数,小数点后几位)—对数格式化
LOWER()
UPPER()
LEFT() RIGHT()
简单的嵌套:
LENGTH()空格也算在长度之内
LTRIM(),RTRIM(),TRIM()例子中前边2个空格后边4个空格,总字节数为11个:
TRIM(LEADING ‘要删除的前导字符’,FROM ‘字符串’);
LEADING—前导
TRAILING—后续
BOTH—前+后
'
REPLACE(‘字符串’,’要替换的字符串’,’替换成什么字符串’)
SUBSTRING(‘字符串‘,从第几位开始,截取几位)—起始位置可以为负值
LIKE –MYSQL中的%相当于编程中的*
%代表任意的字符,_代表任意一个字符
CEIL()
FLOOR()
DIV
%
POWER()指数运算:
ROUND()四舍五入
TRUNCATE()小数截取:
多条写入是,只显示第一条记录的id值,并不是多条
如果设计的mysql数据库是为web页面做准备,建议用MD5()加密
创建一个无参的自定义函数,并且自定义函数的使用:
创建一个带参的自定义函数:
DELIMITER //修改分隔符
创建 聚合函数(默认分割符为;如果不更改分隔符会报错):
过程体可以是任意SQL语句(对数据表的增删改查和连接)
删除存储过程:
创建一个带参的存储过程:
创建带有IN和OUT类型参数:
ROW_COUNT()数据表中被操作过的记录(增删改)