加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MYSQL基础语法案例

发布时间:2022-02-19 14:16:39 所属栏目: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等语句中使用它们,以更新基表的内容。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。更具体地讲,如果视图包含下述结构中的任何一种,那么它就是不可更新的。
视图中虽然可以更新数据,但是有很多的限制。一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,就可能会造成数据更新失败。

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读