MySQL基本语法

什么是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登录_程宇寒的博客-CSDN博客

若按这个键入命令之后出现mysql不是内部命令之类的语句的话,需要自行去环境变量中把mysql.exe文件所在位置加入path中(即bin文件夹位置),加入后去键入命令便可成功登录

解决mysql不是内部或外部命令_pyhui2020的博客-CSDN博客

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)

感谢观看 

引用文章

MySQL 操作语句大全(详细)_mysql建表语句_Yan Yang的博客-CSDN博客

MySQL常用基础语法_mysql基本语法_Younger_zeng的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值