mysql 命令

来源:互联网 发布:用记事本写java 编辑:程序博客网 时间:2024/05/16 04:58
1、DDL:Database Definition Language(数据定义语言)
操作对象:数据库本身及表、索引、触发器、存储过程等。
关键字:CREATE ALTER DROP
创建一个名称为mydb1的数据库。
sql>>CREATE DATABASE mydb1;        //使用数据库安装配置时的默认编码和默认校对规则
查看数据库的创建细节
sql>>SHOW CREATE DATABASE mydb1;
创建一个使用gbk字符集的mydb2数据库。
sql>>CREATE DATABASE mydb2 CHARACTER SET gbk;
创建一个使用utf8字符集,并带校对规则的mydb3数据库。
sql>>CREATE DATABASE mydb3 CHARACTER SET utf8 COLLATE utf8_general_ci;
删除前面创建的mydb2数据库
sql>>DROP DATABASE mydb2;
查看服务器中的数据库,mydb3并把其中某一个库的字符集修改为gbk;
sql>>ALTER DATABASE mydb3 CHARACTER SET gbk;

创建一个员工表:
sql>>USE test;
sql>>CREATE TABLE employee(
id int,
name varchar(200),
gender varchar(10),
birthday date,
entry_date date,
job varchar(100),
salary float(8,2),
resume text
);
查看创建的数据:
sql>>SHOW TABLES;
查看表的结构
sql>>DESC employee;
查看表的创建细节
sql>>SHOW CREATE TABLE employee;
在上面员工表的基本上增加一个image列。
sql>>ALTER TABLE employee ADD image varchar(100);
修改job列,使其长度为60。
sql>>ALTER TABLE employee MODIFY job varchar(60);
删除image列。
sql>>ALTER TABLE employee DROP image;
表名改为user。
sql>>RENAME TABLE employee TO user;
修改表的字符集为utf-8
sql>>ALTER TABLE user CHARACTER SET=utf8;
列名name修改为username
sql>>ALTER TABLE user CHANGE name username varchar(100);
2、DML:Database Manipulation Language(数据操纵语言)
操作对象:数据库表中的数据。
关键:INSERT UPDATE DELETE

Tips:在MySQL中,字符串和日期时间类型的要用单引号引起来。
特殊的值:NULL,与''是不一样的。
练习:
使用insert语句向表中插入三个员工的信息。
方式一:(不建议使用)
sql>INSERT INTO user VALUES (1,'ake','female','1988-09-08','2012-12-15','CEO',16000.00,'beauty');
方式二:
sql>INSERT INTO user (id,username,gender,birthday,entry_date,job,salary,resume) VALUES (2,'taotao','male','1985-09-08','2012-12-15','CTO',15000.00,'handsome');
插入中文数据:
sql>INSERT INTO user (id,username,gender,birthday,entry_date,job,salary,resume) VALUES (3,'戚','male','1986-09-08','2012-12-15','CFO',15000.00,'handsome');

查看数据库的各处(6处)编码:
sql>SHOW VARIABLES LIKE 'character%';
告知服务器客户端使用的编码:
sql>SET character_set_client=gbk;
告知服务器客户端结果使用的编码:
sql>SET character_set_results=gbk;

查看表中的所有数据
sql>SELECT * FROM user;
将所有员工薪水修改为5000元。
sql>UPDATE user SET salary=5000;
将姓名为’taotao’的员工薪水修改为3000元。
sql>UPDATE user SET salary=3000 WHERE username='taotao';
将姓名为’戚斌’的员工薪水修改为4000元,job改为UFO。
sql>UPDATE user SET salary=4000,job='UFO' WHERE username='戚斌';
将ake的薪水在原有基础上增加1000元。
sql>UPDATE user SET salary=salary+1000 WHERE username='ake';

删除表中名称为’taotao’的记录。
sql>DELETE FROM user WHERE username='taotao';
删除表中所有记录。
sql>DELETE FROM user;(一条一条地删除)
使用truncate删除表中记录。
sql>TRUNCATE user;(摧毁整张表。然后重建表结构)



*3、DQL:Database Query Lanauge(数据查询语言)
操作对象:数据库表中的数据等
关键字:SELECT
查询表中所有学生的信息。
sql>SELECT * FROM student;
查询表中所有学生的姓名和对应的英语成绩。
sql>SELECT name,english FROM student;
过滤表中英语重复数据。
sql>SELECT DISTINCT english FROM student;
在所有学生语文分数上加10分特长分。
sql>SELECT name,chinese+10 FROM student;
统计每个学生的总分。
sql>SELECT name,chinese+english+math FROM student;
使用别名表示学生分数。
sql>SELECT name AS 姓名,chinese+english+math 总分 FROM student;
查询姓名为wu的学生成绩
sql>SELECT * FROM student WHERE name='王五';
查询英语成绩大于90分的同学
sql>SELECT * FROM student WHERE english>90;
查询总分大于200分的所有同学
sql>SELECT * FROM student WHERE (chinese+english+math)>200;

查询英语分数在 80-90之间的同学。
sql>SELECT * FROM student WHERE english BETWEEN 80 AND 90;(含首也含尾)
查询数学分数为89,90,91的同学。
sql>SELECT * FROM student WHERE math IN (89,90,91);
查询所有姓李的学生成绩。
sql>SELECT * FROM student WHERE name LIKE '李%';
查询数学分>80,语文分>80的同学。
sql>SELECT * FROM student WHERE math>80 AND chinese>80;
对数学成绩排序后输出。
sql>SELECT name,math FROM student ORDER BY math;//默认是升序ASC
对总分排序后输出,然后再按从高到低的顺序输出
sql>SELECT name,(chinese+english+math) FROM student ORDER BY (chinese+english+math) DESC;
对姓李的学生成绩排序输出
sql>SELECT * FROM student WHERE name LIKE '李%' ORDER BY (chinese+english+math);
------------------------------------------------------------------------------------------
1、定义主键:PRIMARY KEY
主键的特点:唯一且不能为NULL
Tips:在MySQL中可以使用关键字auto_increment完成主键的自动增长。(数据库来管理主键,实际开发中不建议使用,应该由自己的程序来管理)
2、约束某列不能为空:NOT NULL
约束某列取值唯一:UNIQUE

定义一个人:
CREATE TABLE person(
id int primary key auto_increment,
name varchar(100) not null,
idcardnum varchar(100) unique not null,
gender varchar(10)
);
主键:
逻辑主键:与具体业务无关。建议每张表都建立一个与业务无关的逻辑主键。
业务主键:与具体业务有关。
2、多表设计
2.1一对多
CREATE TABLE department(
id int primary key,
name varchar(100) not null
);
CREATE TABLE employee(
id int primary key,
name varchar(100) not null,
dept_id int,
CONSTRAINT dept_id_fk FOREIGN KEY (dept_id) REFERENCES department(id)
);
2.2多对多
CREATE TABLE teacher(
id int primary key,
name varchar(100)
);
CREATE TABLE student(
id int primary key,
name varchar(100)
);
CREATE TABLE teacher_student(
t_id int,
s_id int,
PRIMARY KEY(t_id,s_id),
CONSTRAINT t_id_fk FOREIGN KEY (t_id) REFERENCES teacher(id),
CONSTRAINT s_id_fk FOREIGN KEY (s_id) REFERENCES student(id)
);
2.3一对一
CREATE TABLE person(
id int primary key,
name varchar(100)
);
CREATE TABLE idcard(
id int primary key,
num varchar(100),
CONSTRAINT p_id_fk FOREIGN KEY (id) REFERENCES person(id)
);
3、连接查询
基本语法:SELECT * FROM table1 join_type table2 [on(连接条件)][WHERE(筛选条件)]
table1:左表
table2:右表
join_type:连接类型。
CROSS JOIN
INNER JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
on:指定连接条件
where:对查询的结果进一步的筛选
3.1交叉连接:
SELECT * FROM customer CROSS JOIN orders;或者SELECT * FROM customer,orders;
返回结果:两张表中所有记录的笛卡尔积。customer中有5条记录,orders中有7条,结果中有5*7=35条。
3.2内连接:
3.2.1显示内连接
SELECT * FROM customer c INNER JOIN orders o ON c.id=o.customer_id;返回的结果就是满足连接条件的记录
3.2.2隐式内连接
SELECT * FROM customer c,orders o WHERE c.id=o.customer_id;返回的结果就是满足连接条件的记录
3.3外连接:
3.3.1左外连接:
SELECT * FROM customer c LEFT OUTER JOIN orders o ON c.id=o.customer_id;回的结果不仅包含满足连接条件的记录,还返回左表中其余的所有记录。
3.3.2右外连接:
SELECT * FROM customer c RIGHT OUTER JOIN orders o ON c.id=o.customer_id;回的结果不仅包含满足连接条件的记录,还返回右表中其余的所有记录。
3.3.3进一步的筛选:可以对左外、右外连接的查询结果通过WHERE子句进一步进行筛选。WHERE放到ON的后面。
4、其他查询
4.1子查询:查询姓名叫"陈冠希"的所有订单的详细内容
SELECT * FROM orders WHERE customer_id=(SELECT id FROM customer WHERE name='陈冠希');
4.2联合查询:语句1 UNION 语句2
返回的结果:语句1和语句2的所有没有重复数据的结果并集。
SELECT * FROM orders WHERE price>200 UNION SELECT * FROM orders WHERE customer_id=1;
4.3报表查询
统计有多少订单?
sql>SELECT count(*) FROM orders;

Tips:表格的名称等用户自定义的东东不能使用数据库的关键字。
如果必须用关键字作为表明之类的,使用`(不是单引号。Esc按键的下面)把关键字包围起来。
CREATE TABLE `order`(id int);

统计订单中price大于250多少个?
sql>SELECT count(*) FROM orders WHERE price>250;
统计一个班级数学总成绩?
sql>SELECT sum(math) FROM student;
统计一个班级语文、英语、数学各科的总成绩
sql>SELECT sum(chinese),sum(english),sum(math) FROM student;
统计一个班级语文、英语、数学的成绩总和
sql>SELECT sum(chinese+english+math) FROM student;
统计一个班级语文成绩平均分
sql>SELECT sum(chinese)/count(*) FROM student;
求一个班级数学平均分?
sql>SELECT avg(math) FROM student;
求一个班级总分平均分
sql>SELECT avg(chinese+english+math) FROM student;
对订单表中商品归类后,显示每一类商品的总价
sql>SELECT product,sum(price) FROM order1 GROUP BY product;
查询购买了几类商品,并且每类总价大于100的商品
sql>SELECT product,sum(price) FROM order1 GROUP BY product HAVING sum(price)>100;
5、数据库备份
shell>>mysqldump -h localhost -u root -psorry test>test.sql
恢复:
方式一:
sql>CREATE DATABASE test;
sql>USE test;
sql>SOURCE c:/test.sql;
方式二:
前提:数据名称已经存在了
shell>>mysql -u root -psorry test<test