什么是MySQL
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
MySQL数据库
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
- MySQL 是开源的,目前隶属于 Oracle 旗下产品。
- MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
- MySQL 使用标准的 SQL 数据语言形式。
- MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
- MySQL 对 PHP 有很好的支持,PHP 是很适合用于 Web 程序开发。
- MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
- MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。
(以上摘抄自MySQL 教程 | 菜鸟教程 (runoob.com))
启动MySQL
在命令提示符(win+R)中键入“net start mysql(这里是你的mysql名)”,如果失败就用管理员身份去启动命令提示符,键入一样的内容
登陆方式看这个文章吧,自己写不明白:登录mysql数据库的几种方式_mysql登录_程宇寒的博客-优快云博客
若按这个键入命令之后出现mysql不是内部命令之类的语句的话,需要自行去环境变量中把mysql.exe文件所在位置加入path中(即bin文件夹位置),加入后去键入命令便可成功登录
解决mysql不是内部或外部命令_pyhui2020的博客-优快云博客
MySQL基础语法
在上面的截图可以看出来,我输入的名字是mysql57,但仍然可以启动电脑中名为MySQL57的服务,所以这里并不区分大小写
一个语句以分号作为结尾,若你不敲分号就会一直有个箭头表示你这句还没敲完
第一个样例说明分号可以与语句不同行输入,但一个语句必须遇到分号才算结束
数据定义语言(DDL)
数据库操作
- show databases; 查看所有数据库名称(记得database为复数)
- create database; [数据库名称] 创建一个新的数据库
- drop database; [数据库名称] 删除数据库
- alter database; [数据库名称] 修改数据库
- show tables; 查看当前数据库中所有数据表
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
mysql> create database test
-> ;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql> create satabase test
-> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'satabase test' at line 1
mysql> alter database test character set utf8
-> ;
Query OK, 1 row affected (0.00 sec)
mysql> drop database test;
Query OK, 0 rows affected (0.00 sec)
mysql> show databases ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
相同名字的数据库不可被重复建立,其名字同样不区分大小写
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
mysql> create database TEST;
ERROR 1007 (HY000): Can't create database 'test'; database exists
表操作
在test数据库中建了个表,其实在类型后面可以加一些约束
在 SQL 中,我们有如下约束:
- NOT NULL - 指示某列不能存储 NULL 值。
- UNIQUE - 保证某列的每行必须有唯一的值。
- PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK - 保证列中的值符合指定的条件。
- DEFAULT - 规定没有给列赋值时的默认值。
有关SQL数据类型的可以看这篇文章 MySQL 数据类型 | 菜鸟教程 (runoob.com)
有关SQL表的约束的可以看这篇文章 SQL 约束 | 菜鸟教程 (runoob.com)
- show create table[表名称]; 查看指定表的创建语句
- desc [表名称]; 查看表的结构
- drop [表名称]; 删除表
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| stu |
+----------------+
1 row in set (0.00 sec)
mysql> show create table stu
-> ;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| stu | CREATE TABLE `stu` (
`sid` char(6) DEFAULT NULL,
`sname` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`gender` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> desc stu;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| sid | char(6) | YES | | NULL | |
| sname | varchar(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| gender | varchar(10) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
表修改
前面都是alter table
- [表名字] add 内容; 添加行
- [表名字] modify [行名字] 类型; 改变某一行的数据类型
- [表名字] change [行名字] [更改之后的名字] [数据类型]; 改变行名字
- [表名字] drop [行名字]; 删除某行
- [表名字] remove to [修改之后的名字]; 改表名字
-
mysql> alter table stu add (classname varchar(100)); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table stu modify gender char(7); Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table stu change gender sex char(7); Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table stu rename to stud; Query OK, 0 rows affected (0.00 sec) mysql> desc stud; +-----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+-------+ | sid | char(6) | YES | | NULL | | | sname | varchar(20) | YES | | NULL | | | age | int(11) | YES | | NULL | | | sex | char(7) | YES | | NULL | | | classname | varchar(100) | YES | | NULL | | +-----------+--------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
数据操作语言(DML)
插入操作
insert into stu (sid, sname) values ('1001', ‘Favel’);
insert into stu values ('1002', 'liSi', 19, 'male','class4');
类似这样(图源:计算机科学导论14.4.2)
做完上述操作后表中内容 ,这里的内容区分大小写
但语句中仍不区分大小写
mysql> select *from stu;
+------+-------+------+------+-----------+
| sid | sname | age | sex | classname |
+------+-------+------+------+-----------+
| 1001 | Favel | NULL | NULL | NULL |
| 1002 | lisi | 19 | male | class4 |
+------+-------+------+------+-----------+
2 rows in set (0.00 sec)
mysql> delete from stu where sname = 'favel';
Query OK, 1 row affected (0.00 sec)
mysql> select *from stu;
+------+-------+------+------+-----------+
| sid | sname | age | sex | classname |
+------+-------+------+------+-----------+
| 1002 | lisi | 19 | male | class4 |
+------+-------+------+------+-----------+
1 row in set (0.00 sec)
删除操作
delete from stu where sname = 'favel';(就像上面展示的那样)
delete from stu;(删除表中内容)
更新操作
update stu set sname='Rykony', sid='1003' where sname='lisi';
mysql> select *from stu;
+------+-------+------+------+-----------+
| sid | sname | age | sex | classname |
+------+-------+------+------+-----------+
| 1002 | lisi | 19 | male | class4 |
+------+-------+------+------+-----------+
1 row in set (0.00 sec)
mysql> update stu set sname='Rykony', sid='1003' where sname='lisi';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select *from stu;
+------+--------+------+------+-----------+
| sid | sname | age | sex | classname |
+------+--------+------+------+-----------+
| 1003 | Rykony | 19 | male | class4 |
+------+--------+------+------+-----------+
1 row in set (0.00 sec)
数据控制语言(DCL)
是一种可对数据访问权进行控制的指令,它可以控制特定用户账户对数据表、查看表、存储程序、用户自定义函数等数据库对象的控制权,由grant和revoke两个指令组成。
create user [用户名]@[地址] identified by '[密码]';(创建用户)
grant [权限名] on [数据库名].* to [用户名]@地址 (给用户授予权限)
revoke [权限名] on [数据库名].* from [用户名]@地址 (回收用户的权限)
show grants for [用户名]@地址 (查看用户权限)
use mysql;
update user set password=password('改后的密码') where user='用户名' and host='地址';
flush privileges; (以上三行为修改密码,第二行语法上与DML更新语法类似)
drop [用户名]@[地址] (删除用户)
GRANT 允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。对象创建后,除了创建者外,除非创建者赋予(GRANT)权限,其他人没有访问对象的权限。一旦用户有某对象的权限,他就可以使用那个特权。不需要给创建者赋予(GRANT)对象的权限,创建者自动拥有对象的所有权限,包括删除它的权限。
revoke是一个计算机权限名,其可以废除某用户或某组或所有用户访问权限。(以上摘自百度百科)
数据查询语言(DQL)
select distinct 【列名称】from 【表名称】 (去重提取)
select [列名称] as [自己起的别名] from [表名称] (为列名起别称)
select concat (里面类似java的语法,不过变量与语句间以逗号连接) from [表名称] (格式化输出)
运算符与c与Java类似
范围查询:between ... and 、in (用英语语法套即可)
模糊查询:select [列名称] from [表名称] where [条件] like __[具体内容]%(‘_’表示一个字符的占位,‘%’表示多个字符的占位)
结果排序:select [列名称] from [表名称] order by [列名] (desc|asc) (desc为降序,asc为升序)
mysql> select *from stu;
+------+--------+------+--------+-----------+
| sid | sname | age | sex | classname |
+------+--------+------+--------+-----------+
| 1003 | Rykony | 19 | male | class4 |
| 1004 | si | 20 | female | class1 |
| 1005 | wu | 19 | male | class3 |
| 1006 | liu | 18 | male | class4 |
| 1007 | qi | 19 | female | class3 |
| 1008 | ba | 19 | female | class1 |
| 1009 | jiu | 20 | male | class2 |
| 1001 | yi | 18 | female | class2 |
| 1002 | er | 18 | female | class4 |
+------+--------+------+--------+-----------+
9 rows in set (0.00 sec)
mysql> select *from stu order by age desc , sid asc;
+------+--------+------+--------+-----------+
| sid | sname | age | sex | classname |
+------+--------+------+--------+-----------+
| 1004 | si | 20 | female | class1 |
| 1009 | jiu | 20 | male | class2 |
| 1003 | Rykony | 19 | male | class4 |
| 1005 | wu | 19 | male | class3 |
| 1007 | qi | 19 | female | class3 |
| 1008 | ba | 19 | female | class1 |
| 1001 | yi | 18 | female | class2 |
| 1002 | er | 18 | female | class4 |
| 1006 | liu | 18 | male | class4 |
+------+--------+------+--------+-----------+
9 rows in set (0.01 sec)
mysql> select *from stu where sex like "fe%";
+------+-------+------+--------+-----------+
| sid | sname | age | sex | classname |
+------+-------+------+--------+-----------+
| 1004 | si | 20 | female | class1 |
| 1007 | qi | 19 | female | class3 |
| 1008 | ba | 19 | female | class1 |
| 1001 | yi | 18 | female | class2 |
| 1002 | er | 18 | female | class4 |
+------+-------+------+--------+-----------+
5 rows in set (0.00 sec)
mysql> select *from stu where classname in ('class1','class4');
+------+--------+------+--------+-----------+
| sid | sname | age | sex | classname |
+------+--------+------+--------+-----------+
| 1003 | Rykony | 19 | male | class4 |
| 1004 | si | 20 | female | class1 |
| 1006 | liu | 18 | male | class4 |
| 1008 | ba | 19 | female | class1 |
| 1002 | er | 18 | female | class4 |
+------+--------+------+--------+-----------+
5 rows in set (0.00 sec)
mysql> select *from stu where not age between 19 and 20;
+------+-------+------+--------+-----------+
| sid | sname | age | sex | classname |
+------+-------+------+--------+-----------+
| 1006 | liu | 18 | male | class4 |
| 1001 | yi | 18 | female | class2 |
| 1002 | er | 18 | female | class4 |
+------+-------+------+--------+-----------+
3 rows in set (0.00 sec)
mysql> select sid,sname from stu where classname='class4';
+------+--------+
| sid | sname |
+------+--------+
| 1003 | Rykony |
| 1006 | liu |
| 1002 | er |
+------+--------+
3 rows in set (0.00 sec)
mysql> select distinct classname from stu;
+-----------+
| classname |
+-----------+
| class4 |
| class1 |
| class3 |
| class2 |
+-----------+
4 rows in set (0.00 sec)
mysql> select distinct classname from stu order by classname asc;
+-----------+
| classname |
+-----------+
| class1 |
| class2 |
| class3 |
| class4 |
+-----------+
4 rows in set (0.01 sec)
感谢观看