MySQL基础学习

1.练习服务器地址

云服务器地址:39.106.41.11    student/gloryroad   端口:3306

数据库装在的机器:是数据库服务器

你想连接数据库服务器:

a.需要一个客户端软件 (类似于C/S结构),图形界面的连接方式

     客户端:sqlyog    或者  安卓mysql有个自动的命令行客户端

b.命令行的连接方式:  mysql -h172.20.43.87 -ustudent –pgloryroad

 

本机数据库:

(本机:127.0.0.1或localhost)

mysql   root  密码:QingQing0919

端口:3306

 

2. 一台数据库上可以装多个数据库的实例吗?

可以的,只是比较麻烦,装个多个不同的实例需要通过不同的端口去使用,只装一个的话默认端口就是3306.

 

3. 数据库操作

启动数据库

service gloryroad START

 

关闭数据库

service gloryroad STOP

 

重启数据库

service gloryroad restart

 

USE qing;  使用数据库

CREATE TABLE demo(id INT(11)); 创建表

CREATE TABLE NAME(id INT(11));

SHOW TABLES; 查看表

DROP TABLE demo; 删除表

SHOW TABLES;

 

CREATE USER 'stu'@'%' IDENTIFIED BY "Qing"  创建了一个数据库用户

#stu是用户名,%是哪个ip段可以使用,Qing是该用户的密码

CREATE USER 'gloryroad'@'localhost'IDENTIFIED BY "Qing2" 创建了一个本地使用的数据库用户

FLUSH PRIVILEGES; 刷新,把权限刷新一下(一般创建了用户之后用)

CREATE DATABASE wenqing;  创建数据库

SHOW DATABASES wenqing;  查看数据库

DROP DATABASE;  删除数据库

相关操作命令:

GRANT

SELECT

INSERT

UPDATE

DELETE

CREATE

DROP

 

SELECT DATABASE(); 查询当前在使用哪些库

SELECT USER(); 查询当前登录的哪个用户

SELECT * FROM qing; 查询表

DESC id; 降序查看id

 

4. 创建表:

CREATE TABLE book(

    id INT NOT NULL AUTO_INCREMENT, #非空,字段自增

    book_name VARCHAR(100) NOT NULL, #char不可变  varchar可变,存储实际长度,省空间但费时

    boook_author VARCHAR (40) NOT NULL,

    price INT(10) DEFAULT 0,#默认为0

    publish_date DATE,

    PRIMARY KEY(id) #使用id作为主键

    )ENGINE=INNODB DEFAULT CHARSET=utf8; #innodb只有它支持事务 表的编码是utf-8

 

SHOW TABLES

自己练习创建一个表:

CREATE TABLE people(

       id INT NOT NULL AUTO_INCREMENT,

       NAME VARCHAR(20) NOT NULL,

       sex VARCHAR(4) NOT NULL,

       weight DECIMAL (5,2) DEFAULT 45,  decimal是小数,5,2表示 3位整数2位小数

       high INT(5) DEFAULT 160,

       birth DATE,

       PRIMARY KEY (id)

) ENGINE = INNODB DEFAULT CHARSET = utf8;

 

SHOW TABLES;

 

  1. DROP TABLE book;删除表
  2. 插入数据

USE people;

INSERT INTO people(NAME,sex,weight,high,birth)

           VALUES("林治彭","男",75,173,"1983-10-19"),

           ("齐文清","女",43,153,"1992-10-04");

      

SELECT * FROM people;  查看表数据

 

5. 查表中对应字段

USE people;

SELECT id,NAME FROM people;

 

6. 使用别名查询表中字段

USE people;

SELECT id 序号,NAME 姓名 FROM people;

 不影响原有数据库内容

 

7.精确查询

USE people;

SELECT id 序号,NAME 姓名 FROM people WHERE NAME = "齐文清";

 

 

8. or 或 查询

USE people;

SELECT id 序号,NAME 姓名 FROM people WHERE NAME = "齐文清" OR id = 1;

 

9.and 与 查询  !非

USE people;

SELECT id 序号,NAME 姓名 FROM people WHERE NAME ="林治彭" AND id != 1;

 

10. 升序、降序

USE people;

SELECT id 序号,NAME 姓名 FROM people WHERE NAME ="林治彭" ORDER BY id ;(升序)

USE people;

SELECT id 序号,NAME 姓名 FROM people WHERE NAME ="林治彭" ORDER BY id DESC;(降序)

 

11. 查看限定条数

USE people;

SELECT id 序号,NAME 姓名 FROM people WHERE NAME ="林治彭" ORDER BY id LIMIT 2;

 

12. 查看指定条后面的一条

USE people;

SELECT id 序号,NAME 姓名 FROM people WHERE NAME ="林治彭" ORDER BY id LIMIT 2,1;

 相当于查看的第三条(2,1表示查看第二条后面的一条)

 

13. 模糊查询,用%

USE people;

SELECT id 序号,NAME 姓名 FROM people WHERE NAME LIKE "%林%";

但是模糊查询比较耗费性能

 

14. 统计查询处的结果条数,count函数

USE people;

SELECT COUNT(*) 总数 FROM people WHERE NAME LIKE "%林%";

 

在一些大的数据量时用这个是非常耗费性能的,最后不要这么做,如果需要就在前端处理,前端可以做分布式,尽量不要用数据库做这个事情。

 

15. 增删改查大练习

创建表

CREATE TABLE author(

       id INT NOT NULL AUTO_INCREMENT,

       author_name VARCHAR(100) NOT NULL,

       salary INT(10) DEFAULT 0,

       PRIMARY KEY(id)

)ENGINE = INNODB DEFAULT CHARSET=utf8;

SHOW TABLES

 

16. 插入数据

USE people;

 

INSERT INTO people(NAME,sex,weight,high,birth)

       VALUES ("李老师","女",50,160,"1984-10-11"),

       ("吴老师","男",70,165,"1977-10-29");

SELECT * FROM people;

 

17. 子查询:两个表是关联的,通过一个语句可以查出两个表中的内容

SELECT * FROM people WHERE NAME IN(SELECT author_name FROM author);

DESC NAME;

 

 

18. 内连接

SELECT a.* FROM author a INNER JOIN people b

ON a.`author_name` = b.`name`;

a和b是利用了表别名,inner join实现内连接,使得两个表关联在一起。

 

 

SELECT DISTINCT a.* FROM author a INNER JOIN people b

ON a.`author_name` = b.`name`;

dictinct是去重

 

内连接是把两个表相同的全部做扫码,这样耗费性能。

 

19. 左链接

SELECT a.*,b.`name` FROM author a LEFT JOIN people b

ON a.`author_name` = b.`name`;

左连接的好处是把所有数据都显示出来,以左表为准,左表中数据存在即出现在结果里

 

 

20. 右连接

SELECT b.*,a.author_name FROM people b RIGHT JOIN author a

ON b.`name`= a.`author_name`;

 

 

21. 全连接

不存在

 

22. 分组

SELECT COUNT(*) SUM,author_name FROM author GROUP BY author_name

HAVING SUM >=1;

 

把超过1个相同名字的老师筛选出来,group by分组

sum统计个数,having条件

 

 

23. 练习:把工资大于300000的筛选出来

SELECT author_name,salary FROM author

HAVING salary>=300000;

 

24. 更新数据 update

SELECT * FROM author;

UPDATE author SET author_name = "齐老师"

WHERE author_name = "林老师";

SELECT * FROM author ;

 

25. 删除表

drop:删除的干干净净,把表结构也删除了

trunct:把表中所有数据全删光,不删除表结构

delete:直接删除表中数据,需要有where条件时可以用这个

DELETE FROM author WHERE author_name = "吴老师";

SELECT * FROM author;

不加条件那就全部删除了

 

 

drop author

 

26. union和union all ,把两个表中的字段合成一个字段

SELECT author_name FROM author UNION SELECT NAME FROM people;

 

SELECT author_name FROM author UNION ALL SELECT NAME FROM people;

 

 

27. 事物

SET autocommit =0;

BEGIN;

DELETE FROM author;

SELECT * FROM author;

ROLLBACK; #回滚事物

BEGIN; 开始一个事物

DELETE FROM author;

SELECT * FROM author;

 

COMMIT;# 执行后全部生效,提交

commit和rollback之间的就是事物

 

posted @ 2018-01-25 18:17  小七Libra  阅读(208)  评论(0编辑  收藏  举报