MySql数据库基本语法

数据库操作

  1. cmd命令进入数据库 MySQL-u root -p
  2. 创建数据库 Create database [if not exists] database_name character set utf8|gbk
  3. collate 表示校队规则 utf8_bin 区分字母的大小写 uft-8_general_ci 表示不区分字母的大小写
  4. 查看数据库 SHOW DATABASES;
  5. 查看数据库的创建语句 SHOW CREATE DATABASE 数据库名字
  6. 修改数据库编码:ALTER DATABASE DB_NAME CHARACTER SET UTF8
  7. 删除数据库: DROP DATABASE [IF EXISTES] DB_NAME;
  8. 选择进去特定数据库:USE DB_NAME;
  9. 如何在cmd窗口进行包含汉语的查询和插入:set character_set_cilent=gbk;set character_set_results=gbk;因为cmd窗口只识别gbk编码的汉字,所以设置之后不影响数据库的编码,只是方便查看而已。

数据表操作

创建表 :

( ID INT PRIMARY KEY AUTO_INCREMENT,

  NAME VARCHAR(40) UNIQUE,

  MATH DOUBLE,

  ENGLISH DOUBLE,

  CHINESE DOUBLE
                      
 )[CHCARACTER SET UTF8]; 

  • 查看当前数据库的所有表 : SHOW TABLES;
  • 查看建表语句:SHOW CREATE TABLE TABLE_NAME;
  • 查看表结构 : DESC TABLE_NAME;
修改表
  1. 增加一列:ALTER TABLE TABLE_NAME ADD 列名 类型
  2. 修改一列:ALTER TABLE TABLE_NAME MODIFY 列名 新类型
  3. 修改表的字符集: ALTER TABLE TABLE_NAME CHARACTER SET UTF8
  4. 修改表名:ALTER TABLE 旧的表名 TO 新的表名
  5. 修改列名:ALTER TABLE TABLE_NAME CHANGE 旧的列名 新的列名 新的类型
  6. 删除表: DROP TABLE TABLE_NAME;

操作表记录

  • INSERT
    INSERT INTO TABLE_NAME [(column,[column,...])] VALUES (VALUE,[VALUE...]);

插入的数据应与字段的数据类型相同。
数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
在values中列出的数据位置必须与被加入的列的排列位置相对应。
字符和日期型数据应包含在单引号中。
插入空值:不指定或insert into table value(null)
如果要插入所有字段可以省写列列表,直接按表中字段顺序写值列表

  • UPDATE

UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行

  • DELETE
    DELETE FROM TABLE_NAME [WHERE 子句]

如果不使用where子句,将删除表中所有数据。
Delete语句不能删除某一列的值(可使用update)
使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。
外键约束
删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有所不同,参看mysql文档。

  • QUERY
  1. 基本查询:
    SELECT [DISTINCT] FROM TABLE_NAME [WHERE 子句]
  • 查询学生表中的所有数据 :SELECT * FROM STUDENT;
  • 查询学生表中所有学生的name和math:SELECT NAME,MATH FROM STUDENT;
  • 使用别名查询:SELECT NAME [AS] 姓名,ENGLISH+MATH+CHINESE [AS] 总成绩 FROM STUDENG;
  1. 使用where子句过滤查询(操作符+ - > < % _ between and or in ):
  • 查询姓名为lu的学生的语文成绩:SELECT CHINESE FROM STUDENT WHERE NAME='lu';

  • 查询总分大于200分的学生姓名:SELECT NAME FROM STUDENT WHERE CHINESE+MATH+ENGLISH>200;

  • 查询姓张的学生的姓名:SELECT NAME FROM STUDENT WHERE NAME LIKE '张%'|'张_';

  • 查询数学成绩在70~90的所有学生姓名:SELECT NAME FROM STUDENT WHERE MATH BETWEEN 70 AND 90;

  • 查询英语成绩大于80,数学成绩大于90的学生: SELECT * FROM STUDENT WHERE MATH>80 AND ENGLISH>90;

  • 查询学生语文成绩为60、70、80的学生:SELECT * FROM STUDENG WHERE CHINESE IN (60,70,80);

  1. 使用ORDER BY 关键字对查询结果排序(DESC 降序排列 ASC升序排列(默认排列形式))
  • 查询学生的总成绩按降序排列: SELECT NAME AS 名字,MATH+ENGLISH+CHINESE AS 总成绩 FROM ATUDENG WHERE ORDER BY 总成绩 DESC;
  • 对姓张的学生成绩排序输出: SELECT NAME AS 名字,MATH+ENGLISH+CHINESE AS 总成绩 FROM STUDENG WHERE NAME LIKE '张%' ORDER BY 总成绩 DESC;
  1. 聚合函数-用来将查询结果包裹起来计算(SUM(求和)、COUNT(数据个数)、 AVG(平均数)、MAX(最大值)、MIN(最小值))
  • SUM 用来将查询结果的列进行求和计算:
    统计一个班各科成绩的总成绩:SELECT SUM(MATH),SUM(CHINESE),SUM(ENGLISH) FROM STUDENT;
  • COUNT 用来统计查询结果的个数:
    统计一个班数学成绩大于70的人数:SELECT COUNT(*) FROM STUDENT WHERE MATH>70;
  • AVG 用来计算查询结果的列数据的平均值:
    求出整个班数学成绩平均值:SELECT AVG(MATH) FROM STUDENT;
  • MAX 用来计算查询结果列数据中的最大值:
    求出整个班数学成绩的最大值:SELECT MAX(MATH) FROM STUDENT;
  • MIN 用来计算查询结果列数据的最小值:
    求出整个班数学成绩的最小值:SELECT MIN(MATH) FROM STUDENT;
如果数据有null值,则会造成聚合失败,因为null值无法进行计算,所以在查询时需要添加判空:SELECT AVG(IFNULL(MATH,0)) FROM STUDENG;切记IFNULL 之间没有空格。
分组查询(字段和数据表名字不能使用sql语句的关键字)
create table orders(

id int primary key auto_increment,

name varchar(40) unique,

product varchar(40),

price double);
GROUP BY(分组查询)
  • 对订单中的商品归类后,查询每个商品类的总价:SELECT PRODUCT,SUM(PRICE) FROM ORDERS GROUP BY PRODUCT;
  • 查询购买了几类产品,每类产品的总价不大于20的产品:SELECT PRODUCT FROM ORDERS GROUP BY PRODUCT HAVING SUM(PRICE)<20;

where子句和having子句的区别:

where子句在分组之前进行过滤having子句在分组之后进行过滤
having子句中可以使用聚合函数,where子句中不能使用
很多情况下使用where子句的地方可以使用having子句进行替代

  • 查询单价小于20而总价大于30的商品的名称 :SELECT PRODUCT FROM ORDERS WHERE PRICE<20 GROUP BY PRODUCT HAVING SUM(PRICE)>30

SQL语句书写顺序:

SELECT FROM WHERE GROUP BY HAVING ORDER BY

SQL语句执行顺序

FROM WHERE SELECT GROUP BY HAVING ORDER BY

备份恢复数据库

备份: 在cmd窗口下 mysqldump -u root -p dbName>c:/1.sql
恢复: 方式1:在cmd窗口下 mysql -u root -p dbName<c:/1.sql
方式2:在mysql命令下, source c:/1.sql
要注意恢复数据只能恢复数据本身,数据库没法恢复,需要先自己创建出数据后才能进行恢复.

多表设计多表查询

  1. 外键约束:在进行多表设计时,为了保证表与表之间的约束关系,引出了外键约束来进行关联:
  2. 创建两个表,部门表和员工表,员工表的dept_id作为关联部门表的外键
create table dept(

id int primary key auto_increment,

name varchar(20)

);

insert into dept values(null,'财务部'),(null,'人事部'),(null,'销售部'),(null,'行政部');

create table emp(

id int primary key auto_increment,

name varchar(20),

dept_id int,

foreign key(dept_id) references dept(id)

);

insert into emp values(null,'奥巴马',1),(null,'詹姆斯',2),(null,'本拉登',3),(null,'科比',3);

3.多表查询

笛卡尔积查询:

将两张表的记录进行一个相乘的操作查询出来的结果就是笛卡尔积查询,如果左表有n条记录,右表有m条记录,笛卡尔积查询出有n*m条记录,其中往往包含了很多错误的数据,所以这种查询方式并不常用
select * from dept,emp;

内连接查询:查询的是左边表和右边表都能找到对应记录的记录

select * from dept,emp where dept.id = emp.dept_id;
select * from dept inner join emp on dept.id=emp.dept_id;

外连接查询:

左外连接查询:在内连接的基础上增加左边表有而右边表没有的记录
select * from dept left join emp on dept.id=emp.dept_id;

右外连接查询:在内连接的基础上增加右边表有而左边表没有的记录
select * from dept right join emp on dept.id=emp.dept_id;
全外连接查询:在内连接的基础上增加左边表有而右边表没有的记录和右边表有而左表表没有的记录

select * from dept full join emp on dept.id=emp.dept_id; -- mysql不支持全外连接

可以使用union关键字模拟全外连接:

select * from dept left join emp on dept.id = emp.dept_id
union
select * from dept right join emp on dept.id = emp.dept_id;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 5.多表查询 多表查询 目的:从多张表获取数据 前提:进行连接的多张表中有共同的列 等连接 通过两个表具有相同意义...
    乔震阅读 1,212评论 0 0
  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 1,710评论 0 2
  • 1. 问题的提出## 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出...
    七寸知架构阅读 5,364评论 1 111
  • 1.操作数据库 (1)创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name ...
    newdolphintime阅读 770评论 0 1
  • mysql数据库中 :database : 文件夹table : 数据表(数据文件) 进入mysqlmysql -...
    赋闲阅读 559评论 0 0