当前位置:文档之家› mysql笔记大全

mysql笔记大全

第一章数据库的操作

登陆mysql数据库:mysql -h 127.0.0.1 -u root -p

1、创建代码如下:CREATE DA TABASE example;

SHOW DA TABASES;//显示数据库

2、删除代码:DROP DA TABASE example;

SHOW DATABASES;

3、数据库存储引擎:SHOW ENGINES;

4、查看默认的存储引擎:SHOW V ARIABLES LIKE ‘storage_engine’;

第二章表的操作

登陆mysql数据库管理系统:mysql -h localhost -u root -p

1:创建SQL代码如下:CREATE TABLE example0(id INT,

name varchar(20),

sex Boolean

);

2、主键创建:(1)单字段:CREATE TABLE example1(stu_id INT PRIMARY KEY,

stu_name varchar(20),

stu_sex Boolean

);

(2)多字段:CREATE TABLE (stu_id INT,

stu_name varchar(20),

stu_sex Boolean

PRIMARY KEY(stu_id,stu_name)

);

主键功能:帮助MYSQL以最快的速度查找到表中的某一条信息。(主键和记录的关系=身份证和人的关系)

3、创建student 表SQL代码如下:

USE example;//选择数据库,后才能创建表。

CREATE TABLE student (num INT(10) NOT NULL UNIQUE PRIMARY KEY,

name V ARCHAR(20) NOT NULL,

sex V ARCHAR(4) NOT NULL,

birthday DATETIME,

address V ARCHAR(50)

);

代码执行后,用DESC语句来查看表的结构。

DESC student;

创建grade表:

CREATE TABLE grade(id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,

course V ARCHAR(10) NOT NULL,

s_num INT(10) NOT NULL,

grade V ARCHAR(4),

CONSTRAINT grade_fk FOREIGN KEY (s_num)

REFERENCES student(num)

);

//上述代码的解释:grade 表的外键字段s_num,依赖于student表的num字段,默认存储引擎为InnoDB.

4、将grade表的course字段数据改为VARCHAR(20)代码如下:

ALTER TABLE garde MODIFY course MODIFY course V ARCHAR(20);

DESC grade;//显示修改结果。

5、字段前移代码如下:

ALTER TABLE grade MODIFY s_num INT(10) AFTER id;

DESC grade;

6、更改字段名代码如下:

ALTER TABLE grade CHANGE grade score V ARCHAR(4);

DESC grade;

7、删除grade表的外键约束代码如下:

ALTER TABLE grade ENGINE=MyISAM; //更改存储引擎,由于外键约束,结果显示无法更改

需要删除外键约束:

ALTER TABLE grade DROP FOREIGN KEY grade_fk;

SHOW CREATE TABLE grade\G; //执行此代码,查看外键是否成功上删除。

8、删除外键后,再改存储引擎,代码如下:

ALTER TABLE grade ENGINE=MyISAM;

SHOW CREATE TABLE grade\G;

9、删除字段代码如下:

ALTER TABLE student DROP address;

DESC student;

10、增加字段代码如下:

ALTER TABLE student ADD phone INT(10);

DESC student;

11、更改表名代码:

ALTER TABLE grade RENAME gradeInfo;

SHOW TABLES;

12、删除表代码:

DROP TABLE student;

SHOW TABLES;

第三章索引

例:创user表和information

1、创建user表:

CREATE TABLE user(userid INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,

username V ARCHAR(20) NOT NULL,

passwd V ARCHAR(20) NOT NULL,

info TEXT,

UNIQUE INDEX index_uid(userid DESC),

INDEX index_user(username,passwd),

FULLTEXT INDEX index_info(info)

)ENGINE=MyISAM;

SHOW CREATE TABLE user\G;

DESC student;

//说明:index_uid 是userid字段上的唯一性索引;index_user是username和passwd字段上的索引;index_info 是info字段上的全文索引;存储引擎是MyISAM.

2、创建infomation表:

CREATE TABLE information(id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,

name V ARCHAR(20) NOT NULL,

sex V ARCHAR(4) NOT NULL,

birthday DATE,

address V ARCHAR(50),

tel V ARCHAR(20),

pic BLOB

);

SHOW CREATE TABLE information\G;

DESC information;

//说明:id字段是主键,而且具有唯一性约束。

3、在字段中创建索引代码如下:

CREATE INDEX index_name ON information(name(10));

SHOW CREATE TABLE information\G;

//UNIQUE KEY……(唯一性索引),KEY(字段索引),FULLTEXT KEY(全文索引)

4、创建多列索引代码如下:

CREATE INDEX index_bir ON information(birthday,address);

SHOW CREATE TABLE information\G;

5、创建唯一性索引代码如下(用到ALTER TABLE):

ALTER TABLE information ADD INDEX index_id (id ASC);

SHOW CREATE TABLE information\G;

6、删除索引代码:

(1)

DROP INDEX index_user ON user;

SHOW CREATE TABLE user\G;

(2)

DROP INDEX index_name ON information;

SHOW CREATE TABLE information\G;

第四章视图

1、创建work_info表:

CREATE TABLE work_info(id INT(10) NOT NULL UNIQUE PRIMARY KEY,

name V ARCHAR(20) NOT NULL,

sex V ARCHAR(4) NOT NULL,

age INT(5),

address V ARCHAR(50),

tel V ARCHAR(20)

);

DESC work_info;

2、插入记录:

INSERT INTO work_info V ALUES(1,'张三','M','18','北京市海顁区','1234567'); INSERT INTO work_info V ALUES(2,'李四','M','22','北京市昌平区','2345678'); INSERT INTO work_info V ALUES(3,'王五','F','17','湖南省永州市','3456789'); INSERT INTO work_info V ALUES(4,'赵六','F','25','江苏省淮安市','4567890');

SELECT *FROM work_info; //显示插入的记录

3、创建视图代码如下:

CREATE ALGORITHM=MERGE VIEW

info_view(id,name,sex,address)

AS SELECT id,name,sex,address

FROM work_info WHERE age>20 //视图的条件

WITH LOCAL CHECK OPTION;

SELECT *FROM info_view

4、查看视图的所有记录:

SELECT* FROM info_view;(满足条件的所有记录)

5、修改视图info_view

ALTER ALGORITHM=MERGE VIEW //ALGORITHM 算法; MERGE 融合info_view(id,name,sex,address)

AS SELECT id,name,sex,address

FROM work_info WHERE age<20

WITH LOCAL CHECK OPTION;

SELECT* FROM info_view;

6、更新视图(UPDATE)

UPDATE info_view SET sex='M' WHERE id=3;

SELECT* FROM info_view;

7、删除视图

DROP VIEW info_view;

DESC info_view; // 执行该语句,查看是否存在

8、DESC info_view;和SELECT* FROM info_view;的区别

DESC info_view;显示的是字段属性;SELECT* FROM info_view;显示的是查看具体记录第五章触发器

例:创建product 和operate表

1、创建product表

CREATE TABLE product(id INT (10) NOT NULL UNIQUE PRIMARY KEY,

name V ARCHAR(20) NOT NULL,

function V ARCHAR(50),

company V ARCHAR(20) NOT NULL,

address V ARCHAR(50)

);

2、创建operate 表:

CREATE TABLE operate(op_id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,

op_type V ARCHAR(20) NOT NULL,

op_time TIME NOT NULL

);

3、创建触发器:

(1)创建product_bf_insert触发器

CREATE TRIGGER product_bf_insert BEFORE INSERT

ON product FOR EACH ROW //每一行加一个触发器

INSERT INTO operate V ALUES(null,'insert product',now());

SELECT *FROM information_schema.triggers WHERE TRIGGER_NAME='product_bf_insert'\G //查看触发器基本信息,其中triggers是'触发器'的意思。

(2)创建product_af_update触发器

CREATE TRIGGER product_af_update AFTER UPDATE

ON product FOR EACH ROW

INSERT INTO operate V ALUES(null,'Update product',now());

SELECT *FROM information_schema.triggers WHERE TRIGGER_NAME='product_af_update'\G

(3)创建product_af_del触发器

CREATE TRIGGER product_af_del AFTER DELETE

ON product FOR EACH ROW

INSERT INTO operare V ALUES(null,'delete product',now());

SELECT *FROM information_schema.triggers WHERE TRIGGER_NAME='product_af_del'\G 4、对product表进行操作

(1)向product表中插入一条记录:

INSERT INTO product V ALUES (1,'氨酚','治疗感冒','北京氨酚制药厂','北京市昌平区');

SELECT*FROM product; //显示插入记录

SELECT*FROM operate; //显示触发效果,表明成功触发了product_bf_insert触发器

(2)更新product表的记录

UPDATE product SET address='江苏省淮安市' WHERE id=1;

SELECT*FROM product; //显示插入记录

SELECT*FROM operate; //显示触发效果,表明成功触发了product_af_update触发器

(3)删除product中的一条记录

DELETE FROM product WHERE id=1;

SELECT*FROM product;

SELECT*FROM operate; //显示触发效果,表明成功触发了product_af_del触发器

5、删除触发器

DROP TRIGGER product_bf_insert;

SELECT *FROM information_schema.triggers WHERE TRIGGER_NAME='product_bf_insert'\G //显示删除效果,product_bf_insert 不存在了。

第六章查询数据

1、创建表student:

CREATE TABLE student(id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,

name V ARCHAR(20) NOT NULL,

sex V ARCHAR(4),

birth YEAR,

department V ARCHAR(20) NOT NULL,

address V ARCHAR(50)

);

2、创建表score:

CREATE TABLE score(id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,

stu_id INT(10) NOT NULL,

c_name V ARCHAR(20),

grade INT(10)

);

DESC score;

3、向student表中插入数据(记录)

INSERT INTO student V ALUES(901,'张老大','男',1985,'计算机系','北京市海顁区');

INSERT INTO student V ALUES(902,'张老二','男',1986,'中文系','北京市昌平区');

INSERT INTO student V ALUES(903,'张三','女',1990,'中文系','湖南省永州市');

INSERT INTO student V ALUES(904,'李四','男',1990,'英语系','辽宁省阜新市');

INSERT INTO student V ALUES(905,'王五','女',1991,'英语系','福建省厦门市');

INSERT INTO student V ALUES(906,'徐敏展','男',1990,'计算机系','江苏省淮安市');

SELECT *FROM student;

4、向score表中插入数据(记录)

INSERT INTO score V ALUES(NULL,901,'计算机',98);

INSERT INTO score V ALUES(NULL,901,'英语',80);

INSERT INTO score V ALUES(NULL,902,'计算机',65);

INSERT INTO score V ALUES(NULL,902,'国文',88);

INSERT INTO score V ALUES(NULL,903,'国文',95);

INSERT INTO score V ALUES(NULL,904,'计算机',70);

INSERT INTO score V ALUES(NULL,904,'英语',96);

INSERT INTO score V ALUES(NULL,905,'英语',94);

INSERT INTO score V ALUES(NULL,906,'计算机',96);

INSERT INTO score V ALUES(NULL,906,'英语',98);

SELECT *FROM score; // *表示所有字段,查询所有记录。

5、查询部分记录

SELECT*FROM student LIMIT 1,3; // 1 表示从第二条语句开始查询,3表示查处3条记录

6、指定字段查询(如:查询所有学生的学号、姓名、院系的信息)

SELECT id, name, department FROM student;

7、查询不同类别信息

(1)使用IN关键字

SELECT*FROM student

WHERE department IN ('计算机系','英语系');

(2)使用OR关键字

SELECT*FROM student

WHERE department= '计算机系' OR '英语系'; //只输出计算机系

SELECT*FROM student

WHERE department= '计算机系' OR department= '英语系'; //输出计算机系和英语系8、按年龄(数字)查找

问题是:目前只知道学生出生年月,不知年龄。——需用表达式获取年龄

(1)用AS关键字(形如:A AS B)获取年龄

SELECT name,2012-birth AS age FROM student;

(2) 按年龄查找:

法一:使用BETWEEN AND 关键字

SELECT id,name,sex,2012-birth AS age ,department,address

FROM student

WHERE 2012-birth BETWEEN 18 AND 22;

法二:使用AND 关键字和比较运算符

SELECT id,name,sex,2012-birth AS age,department,address

FROM student

WHERE 2012-birth>=18 AND 2012-birth<=22;

9、查询每个类中的数目(如:每个学院有多少人)

(1)

SELECT department ,COUNT(id)

FROM student GROUP BY department;

//使用GROUP BY关键字进行分组

//然后使用COUNT()函数计算每组有多少记录

(2)当然也可以取名

SELECT department,COUNT(id) AS sum_of_department

FROM student GROUP BY department;

10、从表中查询最高分

SELECT c_name,MAX(grade),stu_id

FROM score GROUP BY c_name;

11、查询某个人的考试成绩

问题:score中只有学号,没有姓名。所以必须根据姓名从student表中提取出学号

SELECT c_name,grade

FROM score WHERE stu_id=

(SELECT id FROM student

WHERE name='李四');

12、用连接查询的方法查询所有信息(如:学生信息、考试信息)

SELECT student.id,name,sex,birth,department,address,c_name,grade

FROM student,score

WHERE student.id=stu_id;

// student.id 表示的是student表的id字段,不同于score的stu_id,但他们都表示学号,用来连接

13、计算总成绩

思:要根据学号进行分组,后才能统计每个学生的总成绩

SELECT stu_id,SUM(grade)

FROM score GROUP BY stu_id;

思;没有姓名的显示,只有学号和成绩,这样不太直观

SELECT stu_id,name,SUM(grade)

FROM student,score

WHERE student.id=score.stu_id

GROUP BY stu_id;

14、统计每科考试的平均成绩

思:必须先按科目分组

SELECT c_name,A VG(grade)

FROM score

GROUP BY c_name;

15、统计计算机成绩低于95的学生

思:需要先找出参加计算机考试的学生,在判断其成绩是否低于95

SELECT *FROM student

WHERE id IN

(SELECT stu_id FROM score

WHERE c_name='计算机' AND grade<95);

16、查询同时参加计算机和英语考试的同学信息

SELECT* FROM student

WHERE id= ANY

(SELECT stu_id FROM score

WHERE stu_id IN (

SELECT stu_id FROM

score WHERE c_name='计算机')

AND c_name='英语');

17、计算机成绩从高到低进行排序

思:先查询出所有计算机考试成绩,然后排序

SELECT stu_id,grade

FROM score WHERE c_name='计算机'

ORDER BY grade DESC;

18、从student表和score表中查询学生学号,合并。

SELECT id FROM student

UNION

SELECT stu_id FROM score;

19、查询姓张、姓徐同学的姓名、院系、考试科目、成绩

SELECT student.id,name,sex,birth,department,address,c_name,grade FROM student,score

WHERE

(name LIKE '徐%')

AND

student.id=score.stu_id;

相关主题
文本预览
相关文档 最新文档