mysql学习总结[1]

由于以前上课没有认真听sql导致需要用sql的时候啥也不会,因为我决定从头重新学习mysql.

一、sql操作数据库语句


操作数据库语句:
CREATE DATABASE [IF NOT EXISTS] databasename(定义列) //创建数据库
DROP DATBASE databasename //删除数据库
ALTER DATABASE databasename CHARACTER SET =gbk // 设置数据库的字符编码
SHOW DATABASES //显示所有数据库
SHOW CREATE DATABASE databasename //显示创建数据库的详细信息
USE databasename //操作数据库
SHOW SELECT DATABASE //显示正在操作的数据库

操作表的语句:
CREATE TABLE [IF NOT EXISTS] tablename //创建表
DROP TABLE tablename //删除表
TRUNCATE TABLE tablename //清空表中的数据
DELETE TABLE tablename //删除表(一行一行删除,效率低)
SHOW TABLES //显示表
SHOW COLUMNS FROM tablename //显示表中的列
SELECT FROM tablename //显示表中的数据



插入操作:
INSERT table_name(coluname,coluname) VALUES(value,value) //向表中插入值
INSERT table_name VALUES(value,value) //可以插入多条数据用逗号隔开
INSERT new_table(column) SELECT old_column from old_table [where+约束条件] //从旧表中选取符合限制条件的列插入新表
INSERT…SELECT… //将查询的结果写入到新的表中。 配合子查询。
CREARE…SELECT…//在创建表的同时将查询的结果写入
删除操作:
DELETE FROM tablename where + 约束条件

更新操作:
UPDATE table_name SET column=value //更新操作 更新表中所有的值
UPDATE table_name SET column=value where+约束条件
查询操作:
SELECT column from table_name [where+限制条件] //查询一列 可以查询多列 用逗号隔开
SELECT column as another_name from table_name // 以别名的方式查询
SELECT column another_name from table_name //以别名的方式查询 同上
SELECT column GROUP BY column [HAVING + 分组条件]//查询结果分组
SELECT
FROM table_name GROUP BY column DESC //倒序排列
SELECT FROM table_name GROUP BY column SEC //升序排列
SELECT
FROM table_name LIMIT number //限制返回的数量
SELECT FROM table_name LIMIT start,number //从star+1开始返回number条数据



二、数据类型



Number类型:
TINYINT(size) -128 到 127 常规。0 到 255 无符号
SMALLINT(size) -32768 到 32767 常规。0 到 65535 无符号
MEDIUMINT(size) -8388608 到 8388607 普通。0 to 16777215 无符号

INT(size) -2147483648 到 2147483647 常规。0 到 4294967295 无符号
BIGINT(size) -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号

FLOAT(size,d)
DOUBLE(size,d)

Date类型:
DATE() 支持的范围是从 ‘1000-01-01’ 到 ‘9999-12-31’
DATETIME() 支持的范围是从 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’
TIMESTAMP() 支持的范围是从 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-09 03:14:07’ UTC
TIME() 支持的范围是从 ‘-838:59:59’ 到 ‘838:59:59’
YEAR() 4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。

Character类型:
CHAR(n)
VARCHAR(n)
VARCHAR(max)
TEXT()

三、约束关系


键:
分为PRIMARY KEY、UNIQUE KEY、DEFAULT KEY
PRIMARY KEY(主键) 只能存在一个,自动为NOT NULL,不能重复
UNIQUE KEY(唯一键) 可以存在多个,不能重复
DEFAULT KEY(默认约束) 插入记录时,没有明确为字段赋值,则自动赋默认值。
AUTO_INCREMENT 自增默认加一 必须跟主键一起使用 主键可以不用

添加主键约束:
ALTER TABLE tablename ADD PRIMARY KEY(column)
删除主键约束:
ALTER TABLE tablename DROP PRIMARY KEY
添加唯一约束:
ALTER TABLE tablename ADD UNIQUE (column)
删除唯一约束:
SHOW INDEX FROM tablename //显示索引
ALTER tablename DROP INDEX column
添加外键约束:
ALTER TABLE childtablename ADD FOREIGN KEY(column) REFERENCES parenttablename(column)
删除外键约束:
ALTER TABLE tablename DROP FOREIGN KEY keyname
添加默认约束:
ALTER TABLE tablename ALTER column SET DEFAULT value
删除默认约束:
ALTER TABLE tablename ALTER column DROP DEFAULT


四、修改列定义



ALTER TABLE table_name MODIFY column_name [定义] FIRST //移动到第一位
ALTER TABLE table_name MODIFY column_name [定义] AFTER column_name //移动到xx的后面
ALTER TABLER table_name MODIFY column_name[修改定义] //修改列定义 注意将大范围修改为小范围时可能导致数据的丢失
ALTER TABLE table_name CHANGE column newcolumn [定义] //修改列名称
ALTER TABLE table_name RENAME [TO/AS] new_name //修改表名称


五、子查询



子查询指嵌套在查询内部,且必须始终出现在圆括号内。
子查询可以包含多个关键字或条件,如DISTINCT、GROUP BY、ORDER BY、LIMIT、函数等。
子查询的外层查询可以是:SELECT,INSERT,UPDATE,SET或者DO
子查询可以返回标量、一行、一列或者子查询。
当子查询返回多个结果是可以用ANY、SOME、ALL修饰


六、连接类型



inner join,内连接

在mysql,join,cross join和inner join 是等价的。

left [outer] join,左外连接

right [outer] join,右外连接

举例: UPDATE tdb_goods INNER JOIN tdb_goods_cates ON goods_cate = cate_name SET goods_cate = cate_id;


七、函数



1.字符函数:
CONCAT() 字符连接
CONCAT_WS() 使用分隔符将字符连接起来,第一个参数为分隔符。
FORMAT() 数字格式化,传入两个参数,第一个参数为希望被格式化的数字,第二个参数为小数点保留的位数,会进行四舍五入。
LOWER() 将字符小写
UPPER() 将字符大写
LEFT() 获取左侧字符,需要传入两个参数,第一个参数为字符串,第二个参数为想要获取的位数。
RIGHT() 获取右侧字符,需要传入两个参数,第一个参数为字符串,第二个参数为想要获取的位数。
函数之间可以进行嵌套。
LENGTH() 获取字符串的长度
LTRIM() 删除前导空格 前导空格指的是第一个字符之前的空格
RTRIM() 删除后续空格 后续空格指的是最后一个字符之后的空格
TRIM() 删除空格 也可以进行一些特殊操作例如: TRIM(LEADING ‘?’ FROM ‘??test??’)表示删除’??test??’前面的’?’ LEADING换成TRAILING表示删除后续的’?’,BOTH表示删除前导和后续的’?’
REPALCE() 字符替换 需要三个参数, 第一个参数为字符串,第二个参数为想要被替换的字符,第三个参数为替换后的字符,可以进行一对多或者多对一替换即’!’可以替换为’???’
SUBSTRING() 字符串的截取,需要三个参数,第一个参数为字符串,第二个参数为截取的起点位置(起点是从1开始),第三个参数为截取的数量,第三个参数可以不写表示截取到最后。第二个参数可以为负值,表示从后开始截取,这时候第二个参数可以省略。
[NOT]LIKE 模式匹配 两个%通配符之前添加包含的内容 若包含的内容中含有% 则使用如下方法:%1%% ESCAPE ‘1’; 在不是通配符的%之前随便加入一个字符 之后使用ESCAPE告诉电脑这个不是通配符

2.数值运算函数
CEIL() 进一取整
FLOOR() 舍一取整
DIV() 整数除法
MOD() 取模 与运算符%等价
POWER() 幂运算 两个参数 第一个参数为底数,第二个参数为指数。
ROUND() 四舍五入 两个参数 第一个参数为进行四舍五入的数,第二个参数为小数点保留的位数。
TRUNCATE() 数字截断 两个参数 第一个参数为进行数字截断的数字,第二个参数为截取到小数点后几位。

3.比较运算符和函数
[NOT]BETWEEN…AND… [不]在范围…之间 区间为闭合区间。
[NOT]IN() [不]在集合…之间
IS [NOT] NULL 是不是NULL ‘NULL’字符串不为NULL

4.日期时间函数
NOW() 当前日期时间
CURDATE() 当前日期
CURTIME() 当前时间
DATE_ADD() 日期添加 两个参数,第一个参数为日期,第二个参数为添加的单位 例如:DATE_ADD(‘2014-3-12’,INTERVAL 365 DAY) 表示在2014-3-12的基础上添加365天。输出结构为2015-3-12。DAY WEEK YEAR MONTH
DATE_DIFF()得到两个日期之间的差值。
DATE_FORMAT() 日期格式化 需要两个参数,第一个参数为日期,第二个参数为格式 例如 DATE_DIFF(‘2014-3-18’,’%m%d%Y’) m为月份,d为天,Y为年,m和d之前可能会出现前导0。若m和d变为大写会变成英文表示

5.信息函数
CONNECTION_ID() 连接ID
DATABASE() 当前数据库
LAST_INSERT_ID() 最后插入记录ID
USER() 当前用户
VERSION() 版本信息

6.聚合函数
AVG() 求平局数
COUNT() 数量
MAX() 获取最大值
MIN() 获取最小值
SUM() 求和

7.加密函数
MD5() 信息摘要算法 WEB页面会用到
PASSWORD() 密码算法 修改Mysql当前用户的密码。


自定义函数



自定义函数的两个必要条件:
1.参数
2.返回值
函数可以返回任意类型的值,也可以使用任意类型的值做参数。

自定义函数:
CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL} routine_body

关于函数体:
1.函数题由合法的SQL语句构成
2.函数体可以是简单的SELECT或INSERT语句
3.函数体如果为复合结构则使用BEGIN…END语句
4.复合结构可以包含声明,循环,控制结构