SQL常用语句总结 | 您所在的位置:网站首页 › sql语句计算差值 › SQL常用语句总结 |
一,简介 1.1 数据库是用来存放数据的,对数据库的操作需要用到SQL语句 1.2 数据库种类有也非常多: 关系型数据库: Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL、SQLite 非关系型数据库: NoSql、Cloudant、MongoDb、redis、HBase 1.3 常用的是Oracle、MySQL、SQLite 二 常用语句操作,MySQL创建用户表为例 2.1 mysql数据类型五大类 整数类型:BIT、BOOL、TINY INT等。 浮点数类型:FLOAT、DOUBLE、DECIMAL。 字符串类型:TEXT、MEDIUM TEXT、LONGTEXT等。 日期类型:Date、DateTime、TimeStamp、Time、Year。 其他数据类型:BINARY、VARBINARY、ENUM、SET等。 2.2 登录MySQL数据库,cmd命令进入MySQL安装目录bin cd D:\PHPTools\mysql-5.7.25\bin 2.3 登录数据库,执行命令,输入密码 mysql -u root -p 2.4 创建数据库 create database DONG; 2.5 删除数据库 drop database DONG; 2.6 使用数据库 use DONG; 2.7 创建用户表 CREATE TABLE IF NOT EXISTS `user`( `uid` INT UNSIGNED AUTO_INCREMENT, `account` VARCHAR(100) NOT NULL, `password` VARCHAR(100) NOT NULL, `name` VARCHAR(100), `sign` VARCHAR(500), `avatar` VARCHAR(100), `time` DATE, PRIMARY KEY (`uid` ) )ENGINE=InnoDB DEFAULT CHARSET=utf8; 2.8 查看全部表 show tables; 2.9 查看表数据结构 desc user; 2.10 删除表 DROP TABLE user; 2.11 插入用户表数据 INSERT INTO user (account,password,name,sign,time) VALUES ("test" , "123456" , "zhangsan" , "hahahahaha" , NOW()); 2.12 查询用户表数据 select * from user; 2.13 where 根据用户id查询 select * from user where uid =2; 2.14 更新用户id是2的,用户的名字和签名 UPDATE user SET name="lisi-lisi222" , sign="吼吼吼吼-吼吼吼吼222" where uid=2; 再次查询可以看到用户名和签名已变 select * from user where uid =2; 2.15 删除用户id==1的那条数据 DELETE FROM user WHERE uid=1; 再次查询用户表,可以看到没有用户id==1的数据了 2.16 使用AND(并且), OR(或者)限制查询 AND查询用户表账户是admin,并且密码是123456的数据 select * from user where account='admin' AND password='123456'; OR查询用户表账户是admin,或者账户是dong的数据 select * from user where account='admin' OR account='dong'; 三 进阶查询,MySQL创建文章表为例 3.1 创建文章表,并关联用户表,创建用户表外键 CREATE TABLE IF NOT EXISTS `article`( `id` INT UNSIGNED AUTO_INCREMENT, `title` VARCHAR(255) NOT NULL, `content` TINYTEXT NOT NULL, `time` DATE, PRIMARY KEY (`id` ), uid INT references user(uid) )ENGINE=InnoDB DEFAULT CHARSET=utf8; 3.2 创建多个文章数据 INSERT INTO article (title,content,time,uid) VALUES ("哈哈" , "哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈" , NOW() , 1); INSERT INTO article (title,content,time,uid) VALUES ("吼吼" , "吼吼吼吼吼吼吼吼吼吼吼吼吼吼吼吼" , NOW() , 1); INSERT INTO article (title,content,time,uid) VALUES ("嗷嗷" , "嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷" , NOW() , 2); INSERT INTO article (title,content,time,uid) VALUES ("呵呵" , "呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵" , NOW() , 2); 3.3 查询文章表数据,可以看到有4条数据 select * from article; 3.4 LIKE 模糊查询 select * from article where content like "%哈哈"; 3.5 查询uid==1的文章 select * from article where uid =1; 3.6 文章表按用户ID降序排序,ASC,DESC select * from article ORDER BY uid DESC; 3.7 ORDER BY分组,文章表按用户分组,统计每个人有多少文章 SELECT COUNT(*) FROM article GROUP BY uid; HAVING 配合 GROUP BY使用,用来过滤分组的条件 先看下全部用户数据 如下满足账户数量大于,才显示结果 select count(*) from user group by time HAVING count(account) > 2; 下面如果数量大于4不会显示结果,因为分组后账户数量不大于4 3.8 LIMIT 限制返回条数,如下限制返回2条数据 select * from article LIMIT 2; 3.9 分页 select * from table_name limit [offset,] rows offset:指定第一个返回记录行的偏移量(即从哪一行开始返回),注意:初始行的偏移量为0 rows:返回具体行数 如下,文章表从第2行开始,检索3行记录,即:检索记录行 3-4 select * from article limit 2 ,3; 分页格式,查询每页10条数据,page页码,pageSize每页条数 select * from table limit (page-1)*pageSize,pageSize; select * from article limit 0,10; 3.10 ALTER修改表 MODIFY修改文章表字段类型,修改title 从 VARCHAR 改为 TEXT ALTER table article MODIFY title TEXT; 或使用CHANGE 修改文章表字段名字,修改 title 为 name。CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型 ALTER table article CHANGE title name TEXT; 查询后可以看到title的名字和类型都变了 3.11 UNION 连接两个以上的表,将结果合并到一个集合中,多个 SELECT 语句会删除重复的数据 SELECT uid FROM user UNION SELECT uid FROM article ORDER BY uid; 用户表和文章表都存在用户id是1,2的数据 3.12 DISTINCT 关键字与 SELECT 语句一起使用,来消除所有重复的记录,并只获取唯一一次记录 如下查询用户表的time字段,会去除重复的time字段 select DISTINCT time from user; 四 多表联合查询 4.1 OIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。4.2 先看下两个表的全部数据 4.2 INNER JOIN 内连接 查询两个表的相同uid的 select a.name , b.name from user a INNER JOIN article b ON a.uid=b.uid; 4.3 LEFT JOIN 左连接 select a.name , b.name from user a LEFT JOIN article b ON a.uid=b.uid; 4.4 RIGHT JOIN 右连接 select a.name , b.name from user a RIGHT JOIN article b ON a.uid=b.uid; 五 事务 5.1 事务概念 在数据库中,我们将一条 SQL 语句称为一次基本的操作。将若干条 SQL 语句“打包”在一起,共同执行一个完整的任务,这就是事务。事务( Transaction)由一次或者多次基本操作构成,或者说,事务由一条或者多条 SQL 语句构成。5.2 事务控制语句: BEGIN 或 START TRANSACTION 显式地开启一个事务; COMMIT 也可以使用 COMMIT WORK,不过二者是等价的。COMMIT 会提交事务,并使已对数据库进行的所有修改成为永久性的; ROLLBACK 也可以使用 ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改; SAVEPOINT identifier,SAVEPOINT 允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT; RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常; ROLLBACK TO identifier 把事务回滚到标记点; SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。 5.3 MYSQL 事务处理主要有两种方法 1、用 BEGIN, ROLLBACK, COMMIT来实现 BEGIN 开始一个事务ROLLBACK 事务回滚COMMIT 事务确认2、直接用 SET 来改变 MySQL 的自动提交模式: SET AUTOCOMMIT=0 禁止自动提交SET AUTOCOMMIT=1 开启自动提交5.4 事务的使用 begin;开始, commit;结束,中间是执行的语句称之为事务 begin; INSERT INTO user (account,password,name,sign,time) VALUES ("shiwu" , "123456" , "shiwu_name" , "事务签名" , NOW()); INSERT INTO article (name,content,time,uid) VALUES ("事务" , "事务事务事务事务事务事务" , NOW() , 1); commit; 六 临时表 6.1 作用: MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间 6.2 TEMPORARY创建临时表 CREATE TEMPORARY TABLE IF NOT EXISTS `article_te`( `id` INT UNSIGNED AUTO_INCREMENT, `title` VARCHAR(255) NOT NULL, `content` TINYTEXT NOT NULL, `time` DATE, PRIMARY KEY (`id` ), uid INT references user(uid) )ENGINE=InnoDB DEFAULT CHARSET=utf8; 6.3 使用 SHOW TABLES命令显示数据表列表时,你将无法看到 article_te表 6.4 删除临时表,默认情况下,当你断开与数据库的连接后,临时表就会自动被销毁。当然你也可以在当前MySQL会话使用 DROP TABLE 命令来手动删除临时表。 DROP TABLE article_te; 七 视图 7.1 视图的特点:可以被当作是虚拟表或存储查询 视图跟表格的不同是,表格中有实际储存数据记录,而视图是建立在表格之上的一个架构,它本身并不实际储存数据记录。临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。 比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。7.2 视图的创建 创建一个用户表的视图,查询全部用户信息 create VIEW user_view as select * from user; 7.3 查看视图 show tables; 7.4 查询视图数据 select * from user_view; 7.5 插入修改视图跟正常表一样 INSERT INTO user_view (account,password,name,sign,time) VALUES ("view" , "123456" , "view_name" , "呀呀呀呀" , NOW()); 查询可以看到已经有该条数据了 7.6 删除视图 DROP view user_view; 再次查看表,已经没有该视图了 八 触发器 TRIGGER 8.1 触发器是数据库的一种回调机制,当达到某种条件时,会自动执行语句。 8.2 创建触发器结构 DELIMITER || CREATE TRIGGER [触发器的名字] [触发器执行时机] [触发器监测的对象] ON [表名] FOR EACH ROW BEGIN[触发器主体代码][触发器主体代码]END || DELIMITER ||:MySQL 默认分隔符是; 但在触发器中,我们使用 || 表示触发器的开始与结束。[触发器的名字]:这里填写触发器的名字[触发器执行时机]:这里设置触发器是在关键动作执行之前触发,还是执行之后触发。[触发器监测的对象]:触发器可以监测 INSERT、UPDATE、DELETE 的操作,当监测的命令对触发器关联的表进行操作时,触发器就被激活了。[表名]:将这个触发器与数据库中的表进行关联,触发器定义在表上,也附着在表上,如果这个表被删除了,那么这个触发器也随之被删除。FOR EACH ROW:这句表示只要满足触发器触发条件,触发器都会被执行,也就是说带上这个参数后,触发器将监测每一行对关联表操作的代码,一旦符合条件,触发器就会被触发。[触发器主体代码]:这里是当满足触发条件后,被触发执行的代码主体。这里可以是一句 SQL 语句,也可以是多行命令。如果是多行命令,那么这些命令要写在 BEGIN...END 之间。8.3 创建触发器 创建如下结构的触发器 CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW BEGIN 执行语句列表 END默认分隔符,结束符是分号,以 ; 作为结束执行语句,但可能会与触发器中需要的分行起冲突,为解决此问题可用DELIMITER,如:DELIMITER ||,可以将结束符号变成||,当触发器创建完成后,可以用DELIMITER ;来将结束符号变成; DELIMITER || 触发插入数据前,会把对应的账户改为"_new " CREATE TRIGGER user_demo BEFORE INSERT ON user FOR EACH ROW BEGIN if new.account='trigger_test' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT ='禁止用户名是trigger_test'; END IF; END || 使用IF...THEN...END IF 来创建一个监测 INSERT 语句写入的值是否在限定的范围内的触发器 如果插入的账户是trigger_test,就会返回错误信息(禁止用户名是trigger_test) 8.4 查看已创建的触发器 show triggers; 8.5 执行触发器,上面条件是插入用户表数据会触发,我们来插入数据看看 插入一条账户名是trigger_test的数据 INSERT INTO user (account,password,name,sign,time) VALUES ("trigger_test" , "123456" , "trigger_test" , "触发器签名_test" , NOW()); 可以看到触发器返回了错误信息,禁止用户名是trigger_test 8.6 删除触发器 drop trigger user_demo; 再查看触发器已经没有了 8.8 注意: 触发器是针对数据发送改变才会被触发,对应的操作只有 INSERTDELETEUPDATE九 导出数据 9.1 使用 SELECT ... INTO OUTFILE 语句导出数据 SELECT * FROM user INTO OUTFILE 'D:\\PHPTools\\mysql-5.7.25\\outfile\\user.txt'; 9.2 可能出现导出失败的提示 这是mysql设置的权限的问题,可以使用show variables like ‘%secure%’;查看 secure-file-priv 当前的值是什么 可以看到最后一行 secure_file_priv 是 NULL就代表禁止导出,需要在my.ini里面配置一下 MySQL服务重启一下 再次执行导出 SELECT * FROM user INTO OUTFILE 'D:\\PHPTools\\mysql-5.7.25\\outfile\\user.txt'; 可以看到成功了 在目录里面会生成一个文本文件 打开文件内容如下 十 导入数据 10.1 使用 LOAD DATA 导入数据 新建一个 user2 空白表 10.2 查询空数据 10.3 导入刚的 user.txt 文件 LOAD DATA LOCAL INFILE 'D:\\PHPTools\\mysql-5.7.25\\outfile\\user.txt' INTO TABLE user2; 10.4 再次查询,看到数据已经导入进来了 10.5 注意: 如果指定LOCAL关键词,则表明从客户主机上按路径读取文件。如果没有指定,则文件在服务器上按路径读取文件 |
CopyRight 2018-2019 实验室设备网 版权所有 |