一、摘要
本文主要基于MySQL数据库,详细介绍了常用的SQL语句。由于篇幅较长,难免有一些遗漏。欢迎广大网友批评指正。
具体内容主要包括以下几个部分:
库操作表操作数据操作运算符查看函数存储过程触发器序列用户权限
二、库操作
2.1、新增库
创建数据库相对简单,只需在创建时直接指定字符集和排序规则即可。
如果不存在则创建数据库`库名称` 默认字符集utf8mb4 COLLATE utf8mb4_unicode_ci; 示例:
CREATE DATABASE IF NOT EXISTS test_db default charset utf8mb4 COLLATE utf8mb4_unicode_ci;
2.2、修改库名
有三种方法可以更改MyISAM 存储引擎的数据库名称。对于Innodb,直接进入数据库目录mv。它根本不起作用,我收到一条“表不存在”消息。
方法一
RENAME 数据库olddbname TO newdbname 此语法在mysql-5.1.7 中添加,并在mysql-5.1.23 中删除。由于存在数据丢失的风险,官方不建议这样做。
方法二
思路是先创建一个新库,然后将旧库中的数据导入到新库中,完成库重命名。
1、创建需要重命名的数据库。 2、Mysqldum导出要重命名的数据库。 3、删除原来的旧数据库(确定是否真的需要) 这种方法当然安全,但是如果数据量很大的话,时间会比较长。同时,还必须考虑磁盘空间等硬件成本。
例子:
# 将db1库备份到db1.sql文件中mysqldump -u root -p db1 /usr/db1.sql; # 将备份文件导入到新库中db2mysql -u root -p db2 /root/db1.sql;删除旧库(如果确实需要) DROP DATABASE db1;
方法三
直接运行shell 脚本。
#!/bin/bash#假设db1数据库名称更改为db2#。 MyISAM可以直接修改数据库目录中的文件。 mysql -uroot -p123456 -e '如果数据库不存在则创建db2'list_table=$(mysql -uroot -p123456 -Nse '从information_schema.TABLES 中为$list_table 中的表选择table_name (TABLE_SCHEMA='db1'') for mysql -uroot -p123456 -e '将表从db1.$table 重命名为db2.$table'done 其中p123456,p 是密码缩写,123456 是数据库密码代表一个值。
2.3、删除库名
删除库相对容易。直接删除就可以了。
删除数据库db1;
2.4、使用库
使用db2;
三、表操作
3.1、创建表
创建表ts_user (id bigint(20) unsigned NOT NULL COMMENT 'encoding', name varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''评论“用户名”, mobile varchar(11) COLLATE utf8mb4_unicode_ci DEFAULT '' '' COMMENT '手机号码', create_userid varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建者', create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_userid var char ( 32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '更新者', update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (id), KEY idx_create_time (create_time) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
3.2、修改表名
ALTER TABLE ts_user RENAME TO ts_new_user;
3.3、删除表
3.4、字段操作
显示ts_user 中的所有列;为ts_user 列添加性别tinyint (4 ) NOT NULL DEFAULT '1' COMMENT '性别,1,男,2,女' AFTER mobile;
3.4.1、查询表字段
ALTER TABLE ts_user 列mobile varchar(30) NOT NULL DEFAULT '' COMMENT '用户的手机号码';010 - 1010 ALTER TABLE ts_user 删除列性别
3.4.2、新增字段
3.4.3、修改字段
SHOW INDEXES FROM ts_user;
3.4.4、删除字段
alter table ts_id index idx_id (id);user add unique idx_id (id)
3.5、索引操作
我会的。 alter table ts_user add Primary key idx_id (id) ;
3.5.1、查询表索引
alter table ts_user add index idx_id_name (id,name) ;
3.5.2、新增普通索引
table alter ts_user add fulltext idx_id (id) ;
3.5.3、新增唯一索引
# 删除常规索引. Index idx_id;# 删除主键索引。删除表ts_user。
3.5.4、新增主键索引
3.5.5、新增多列索引
从ts_user 中选择*;
ts_user; select ID, name from
3.5.6、新增全文索引
,并在查询中select ID, name from ts_user (name='张三', 或者select ID, name from ts_user in query, where name=select id, name from ts_user where name in ('张三', '李四')like模糊查询(%为通配符) select id, name from ts_user where name like 'Zhang %' is notempty 查询从ts_user中选择id, name (name is not null) 。 区间字段查询从ts_user中选择id、name、age。年龄=18 岁,年龄=30 岁。从ts_user 中选择id、姓名、年龄。年龄范围为18-30岁。请选择一个名称。 (casewhen range=90 then 'excellent' when 80=range 90 then 'good' when 80scope=70 then 'medium'else 'bad'end) as Judgefrom ts_user
3.5.7、删除索引
left join query select tu.id, tu. name ,tr.role_namefrom ts_user tuleft join ts_role tr on tu.id=tr.user_id 右连接查询select tu.id, tu.name,tr.role_namefrom ts_user turight join ts_role tr on tu.id=tr.user_id 内连接查询select tu .id, tu.name,tr.role_namefrom ts_user tuinner join ts_role tr on tu.id=tr.user_id 全联接查询select tu.id, tu.name,tr.role_namefrom ts_user tufull join ts_role tr on tu.id=tr user_id
四、数据操作
统计学生总数select count(id) from ts_user 查询最大学生年龄select max(age) from ts_user 查询最大学生年龄select min(age) from ts_user 查询各项总和学生成绩select id, sum (score) from ts_user group by id 查询每个学生成绩的平均分select id, avg(score) from ts_user group by id 平均分大于100的学生查询信息select id, avg( Score) avg(score) from ts_user group by ID with 100
4.1、查询操作
4.1.1、单表查询
INSERT INTO ts_user(id, name) VALUES ('1', '张三');010 -1010 INSERT INTO ts_user(id, name) VALUES( '1', '张三'),('2', '李四'),('3', '王五');
4.1.2、关键字查询
update ts_user set name='李四1',age=' 18' where id='1'
4.1.3、连表查询
# 删除表中所有内容delete from ts_user # 根据判断条件删除delete from ts_user where id='1'
4.1.4、分组查询
MySQL主要有以下操作符:
算术运算符比较运算符逻辑运算符按位运算符
4.2、插入操作
运算符说明示例+ 加法选择1+2;结果为3 - 减法结果为6/除法如果选择6/3,则结果为2%,则剩余10%3。
注意:对于除法和取模运算,如果除数为0,则为非法除数,返回结果为NULL。
4.2.1、单列插入
比较运算符经常用在SELECT 语句的条件语句中。您可以使用这些比较运算符来确定表中的哪些记录符合您的条件。如果比较结果为true,则返回1;如果为false,则返回0;如果比较结果不确定,则返回NULL。
运算符解释示例=等于select * from t_user where user_id=1 查询用户ID 1 的信息!=不等于select * from t_user where user_id !=1 select * from t_user where 查询用户ID 大于user_id 1 的信息用户ID 大于1=大于select * from t_user where user_id=1 查询用户ID 大于等于1 的信息select * from t_user where user_id 查询用户ID 小于1 的信息大于1=大于select * from t_user where user_id=1 查询ID小于等于1的用户信息BETWEEN AND select * from t_user where user_id Between 1 to 100 查询ID在1到100之间的用户信息。 user_id=1 和user_id=100 并且不是两个值select * from t_user where user_id is not in the range 1 to 100 user_id is not in the range 1 to 100, as is user_id 1 and user_id 100IN 查询用户ID信息1 or 2 select * from t_user where user_id in ('1','2') 查询用户ID 1或2的信息NOT IN 不在集合中select * from t_user where user_id not in ('1', '2') % 表示0 个或多个匹配,例如模糊匹配来查询除用户ID 1 和2 之外的信息。 select * from t_user where user_name like '%张%' 查询用户名包含的信息。张IS NULL为空。 select * from t_user where user_name is null 查询包含用户名的信息。 isempty IS NOT NULL is notempty select * from t_user where user_name not is null 查询username不为空的信息
注意:mysql不限制IN语句中参数的数量。但整个SQL语句的长度是有限制的,不能超过4M。
4.2.2、多列插入
逻辑运算符用于确定表达式是真还是假。如果表达式为true,则结果为1。如果表达式为假,则结果为0。
运算符说明示例NOT 或! 逻辑NOT 不为1。结果是0AND。 逻辑AND 选择2 或0。结果是1XOR。 逻辑异或选择1。
4.3、修改操作
位运算符是执行二进制计算的运算符。在按位运算中,首先将操作数转换为二进制,然后再执行按位运算。接下来,将结果从二进制转换为十进制。
运算符说明示例按位与select 35; 按位异或select 3I5; 结果为7^ 按位异或select 3^5; 按位取反select ~18446744073709551612; 结果为3 位右移选择31结果是1 位左移选择31。
4.4、 删除操作
优先级(从高到低) 运算符1!2-(减号)、~(按位求反) 3^(按位异或) 4*,/(DIV),%(MOD)5+ ,-6,78I9=(比较运算),=,=,=,=,IN,IS NULL,LIKE,REGEXP10BETWEEN AND,CASE,WHEN,THEN,ELSE11NOT12,AND13XOR14II,OR15=(赋值运算),=
注:如果无法确定优先级,请使用括号()更改优先级,以明确计算过程。
五、运算符
View是一个虚拟表。这是一个逻辑表,本身不包含任何数据。作为select 语句保存在数据字典中。
5.1、算术运算符
创建[或替换] [算法={UNDEFINED | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] 检查选项]
OR REPLACE:表示替换现有视图。 ALGORITHM:表示视图选择算法。默认算法是UNDEFINED:MySQL自动选择要使用的算法。 temptable 临时表select_statement:代表一条select语句。 [CASCADED | LOCAL ] CHECK OPTION]:表示视图更新时保证在视图的权限范围内。 Cascade:表示更新视图时必须满足视图和表的关联条件。 met.local:表示定义的条件在视图更新时以基本形式可用。
创建视图创建视图名称[(column_list)] 作为带有检查选项的select 语句。
create view v_user(username,age)asselect user_name,age from t_userwith check option;
5.2、比较运算符
使用show create view 语句显示视图信息。 show create view v_user; 创建视图后,您可以像常规表一样使用它。视图主要用于select * from v_user 等查询;
5.3、逻辑运算符
删除视图是指删除数据库中已存在的视图。仅删除视图定义,不删除任何数据。这意味着基表没有移动。
DROP VIEW [IF EXISTS] view_name [, view_name] . 删除示例:
删除视图IF EXISTS v_user;
5.4、位运算符
5.5、运算符优先级
函数说明实例char_length(s) 返回字符串的字符长度sselect char_length('hello') as content;concat(s1,s2.sn) 连接字符串s1, s2等到一个字符串中select concat('hello ', 'world') as content;format(x,n) 将数字x 转换为小数位格式为n 位,舍入最后一位数select format (500.5634, 2) ) 作为内容; lower(s) 将所有字符更改为小写select lower('HELLO'); 当前返回日期和时间select current_timestamp(); 格式化时间或日期select DATE_FORMAT( current_timestamp(),'%Y- %m-%d %H:%i:%s');IFNULL(v1,v2) 如果v1 的值不为NULL,则返回v1,否则返回v2select IFNULL(null ,'hello word ');
六、视图
6.1、创建视图
CREATE FUNCTION fn_name(func_parameter[,])RETURNS type[characteristic.]routine_body 参数说明:
fn_name:自定义函数名func_parameter: param_name typetype: mysql 支持的任何类型characteristic: LANGUAGE SQLroutine_body: 函数体
6.2、查看视图
ALTER FUNCTION fn_name [characteristic.] 参数说明:
fn_name:自定义函数名称func_parameter: param_name typecharacteristic: LANGUAGE SQL
6.3、删除视图
DROP FUNCTION [IF EXISTS] fn_name;
fn_name:自定义函数名func_parameter: param_name type
七、函数
SHOW FUNCTION STATUS [LIKE 'pattern'] 参数说明:
模式:函数名称示例:
显示函数状态,如“user_function”
7.1、常用函数列表
显示创建函数fn_name;
fn_name: 自定义函数名称
7.2、自定义函数语法介绍
7.2.1、创建函数
CREATE TABLE `t_user` ( `user_id` int(10) NOT NULL AUTO_INCRMENT COMMENT '用户ID,作为主键', `user_name` varchar(5) DEFAULT NULL COMMENT '用户名', `age` int(3) DEFAULT NULL COMMENT 'Age', PRIMARY KEY (`user_id`)) ENGINE=InnoDB AUTO_INCRMENT=1 DEFAULT CHARSET=utf8;
7.2.2、编辑函数
INSERT INTO t_user (user_name,age)VALUES('张三',24),('李四',25),('
王五',26),('赵六',27);