MYSQL基础语法案例
发布时间:2022-02-19 14:34:02 所属栏目:MySql教程 来源:互联网
导读:小编给大家分享一下MYSQL基础语法示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 用户管理 新建用户及密码:foo为名,123为密码,locahost为固定地址登录 # 以下为两
小编给大家分享一下MYSQL基础语法示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 用户管理 新建用户及密码:foo为名,123为密码,locahost为固定地址登录 # 以下为两种创建方式 CREATE USER foo@localhost IDENTIFIED BY ‘123’ insert into mysql.user(Host,User,Password) values("localhost","test",password("1234")); #只要更改了用户及密码 flush privileges 设置及更改用户密码: #以下为三种更改方式 SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword') #若果是当前登录用户 SET PASSWORD = PASSWORD('newpassword') update mysql.user set password=password('newpassword') where User='username' and Host='host' #只要更改了用户及密码 flush privileges 删除用户: Delete FROM user Where User='test' and Host='localhost'; flush privileges; # 删除用户的数据库 drop database testDB; # 删除账户及权限 drop user 用户名@ localhost; 授权: GRANT INSERT,DELETE,UPDATE,SELECT ON databasename.tablename TO 'username' @'host' flush privileges 说明: (1)privileges-用户的操作权限,如SELECT , INSERT , UPDATE (2)databasename - 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示, 如.* (3)新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效 查看权限: show grants for root@localhost; 去除权限: # GRANT的反操作,去除权限 REVOKE SELECT ON db_name.* TO name; 登录远程MySQL(ubuntu): mysql -h <远程ip> -P 远程端口 -u 用户- p 密码 # 需远程ip和端口:10.10.101.111:30061 远程mysql的用户及密码 mysql -h 10.10.101.111 -P 30061 -u root -p 123456 MYSQL数据类型 数据库 查看数据库:SHOW DATABASES; 创建数据库: CREATE DATABASES db_name; 使用数据库: USE db_name; 删除数据库: DROP DATABASE db_name; 设置数据库编码: set names utf8; 表 创建表: CREATE TABLE table_name( id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(60) NOT NULL, score TINYINT UNSIGNED NOT NULL DEFAULT 0,PRIMARY KEY(id) )ENGINE=InnoDB;//设置表的存储引擎,一般常用InnoDB和MyISAM;InnoDB可靠,支持事务;MyISAM高效不支持全文检索 设置表编码:create table name (…) ENGINE=InnoDB DEFAULT CHARSET=utf8; 复制表:CREATE TABLE tb_name2 SELECT * FROM tb_name 部分复制: CREATE TABLE tb_names SELECT id,name FROM tb_namr; 创建临时表:CREATE TEMPORARY TABLE tb_name; 临时表:客户端与服务器会话中使用处理特定事务,节省空间、私密性 查看数据库中可用表: SHOW TABLES; 查看表结构: DESCRIBE tb_name; 或者 SHOW COLUMNS FROM tb_name; 删除表: DROP [ TEMPORARY ] TABLE [ IF EXISTS ] tb_name[ ,tb_name2…….]; DROP TABLE IF EXISTS `db_school`,`Student`; 表别名: SELECT a.title,a.content,u.username FROM article AS a, user AS u where a.aid=1 and a.uid=u.uid 表重命名:RENAME TABLE name_old TO name_new; 或ALTER TABLE name_old RENAME name_new; 更改表结构:ALTER TABLE tb_name ADD[CHANGE、RENAME、DROP] ALTER TABLE tb_name ADD COLUMN address varchar(80) NOT NULL; ALTER TABLE tb_name DROP address; ALTER TABLE tb_name CHANGE score score SMALLINT(4) NOT NULL; 数据 插入数据: INSERT INTO tb_name(id,name,score) VALUES(NULL,’张三’,140),(NULL,’张四’,178),(NULL,’张五’,134); 注意: 插入多条数据直接后面加上逗号 插入检索出来的数据: INSERT INTO tb_name(name,score) SELECT name score FROM tb_name2; 更新数据 UPDATE tb_name SET score=180 WHERE id=2; UPDATE tablename SET columnName=NewValue[WHERE condition] 删除数据: DELETE FROM tb_name WHERE id=3; 条件控制 where语句: SELECT * FROM tb_name WHERE id=3; Group by Group by解释 GROUP BY 与WHERE联合查询: select 列a,聚合函数 from 表名 where 过滤条件 group by 列a having 过滤条件 当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组 使用having字句对分组后的结果进行筛选 HAVING语句: SELECT * FROM tb_name GROUP BY score HAVING count(*)>2; Having用法 *以上三者实践: 转载: mysql group by 用法解析(详细) 相关条件控制符: =、>、<、<>、IN(1,2,3......)、BETWEEN a AND b、NOT AND 、OR Like()用法中 % 为匹配任意、 _ 匹配一个字符(可以是汉字) IS NULL 空值检测 IS NOT NULL IN NOT IN // limit [offset,] N #如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1) : SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15 多条件查询: SELECT * FROM tb_name WHERE id=1003 AND price<=10 # WHERE id=1003 OR price<=10 # WHERE id IN(1002,1003) # WHERE id NOT IN(1002,1003) # WHERE name like '%huxx' 分组查询:分组查询可以按照指定的列进行分组 SELECT COUNT() FROM tb_name GROUP BY score HAVING COUNT()>1 ; 注意:以上条件用HAVING,GROUP BY 按列排序 排序: ORDER BY column_name DESC|ASC; //按数据的降序和升序排列 SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC; MySQL常见运算符 正则表达式: SELECT * FROM tb_name WHERE REGEXP ‘^[A-D]’; 解释:使用“^”匹配名字的开始,找出以A-D为开头的name * 正则表达式实践: 参考博客:MYSQL使用正则表达式过滤数据 子查询 where型子查询:(把内层查询结果当作外层查询的比较条件) #不用order by 来查询最新的商品 select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods); #取出每个栏目下最新的产品(goods_id唯一) select cat_id,goods_id,goods_name from goods where goods_id in(select max(goods_id) from goods group by cat_id); from型子查询: (把内层的查询结果供外层再次查询) #先查出哪些同学挂科两门以上 select name,count(*) as gk from stu where score < 60 having gk >=2; #以上查询结果,我们只要名字就可以了,所以再取一次名字 select name from (select name,count(*) as gk from stu having gk >=2) as t; #找出这些同学了,那么再计算他们的平均分 select name,avg(score) from stu where name in (select name from (select name,count(*) as gk from stu having gk >=2) as t) group by name; exists型子查询:(把外层查询结果拿到内层,看内层的查询是否成立) #查询哪些栏目下有商品,栏目表category,商品表goods select cat_id,cat_name from category where exists(select * from goods where goods.cat_id = category.cat_id); MySQL函数 distinct : 去重 Select player_id,distinct(task_id) from task; distinct去除重复样本(多个字段) select distinct Student.Sno,Sname from Student (另一种方式) 字符串连接——CONCAT() SELECT CONCAT(name,”==>”,score) FRON tb_name; 数学函数: AVG、SUM、MAX、MIN、COUNT 文本处理函数: TRIM、LOCATE、UPPER、LOWER、SUNSTRING 运算符: +、-、*、 时间函数: DATE()、CURTIME()、DAY()、YEAR()、NOW()….. JOIN详解 join 用于多表中字段之间的联系 ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona JOIN 按照功能大致分为如下三类: * INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录 * LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录 * RIGHT JOIN(右连接):与 LEFT JOIN 相反,取得右表(table2)完全记录,即是左表(table1)并无匹配对应记录 注意:mysql不支持Full join,不过可以通过UNION 关键字来合并 LEFT JOIN 与 RIGHT JOIN来模拟FULL join. 具体参考博客Mysql Join语法解析与性能分析 视图与数据库: 视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变。 视图的建立和删除只影响视图本身,不影响对应的基本表 某些视图是可更新的。也就是说,可以在诸如UPDATE、DELETE或INSERT等语句中使用它们,以更新基表的内容。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。更具体地讲,如果视图包含下述结构中的任何一种,那么它就是不可更新的。 视图中虽然可以更新数据,但是有很多的限制。一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,就可能会造成数据更新失败。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |