全文共分为以下几个部分:
mysql常识--笔试常考题
进入mysql命令行---linux下的进入命令
一个综合实验搞定常用mysql命令---来自于面试题
你看不懂这些命令,且看下文---逐条解释,触类旁通
mysql数据类型--了解
mysql运算符及运算顺序--了解
注意事项---犯错之后的总结
Mysql是一个开放源码的数据库管理系统(DBMS)
数据库管理系统有三个主要组成部分:
数据库:存储数据的地方
数据库管理系统:用于管理数据库的软件
数据库应用程序:为了提高数据库系统的处理能力所使用的管理数据库的软件补充
链接数据库的方式:
操作系统
Python下载接口连接
Cmd连接
ODBC API:给所有的数据库提供一个共同的接口
Java API:是java应用程序连接数据库的一种方法
Mysql版本:
社区版:完全免费,官方不提供技术支持
企业版:付费使用,支持ACID,官方提供电话技术支持
Navicat for mysql
Navicat for mysql 是一套专为mysql设计的高性能数据库管理开发工具,支持大部分mysql最新版本的功能,包括触发器,存储过程,函数,事件,视图,管理用户等
Mysql workbench的优势
Mysql workbench是一款专门为用户提供用于创建,修改,执行,优化SQL的可视化工具,开发人员可以很轻松的管理数据。
用户通常认为mysql workbench是一个mysql数据库ER模型设计的工具。
进入mysql命令行
1、开启mysql服务:
service mysqld start
/init.d/mysqld start
safe_mysql &
2、关闭mysql服务
service mysqld stop
/etc/init.d/mysqld stop
mysqladmin -uroot -p123456 shutdown
3检查端口是否运行
lsof -i:3306
netstat -tunlp|grep 3306
ss -tulnp|grep 3306
4为MySQL设置密码或者修改密码。
方法一
mysqladmin -u root -p123456 password 'abc123' #比较常用
方法二(sql语句修改)
set password=password('abc123');
5登陆MySQL数据库。
单实例登陆
mysql -uroot -p123456
多实例登陆
mysql -uroot -p123456 -S /data/3306/mysql.sock
查看mysql版本:
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.23 |
+-----------+
查看mysql当前用户
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
综合实验
实验描述:
1创建数据库Market
2创建表,结构如下
3将c_contact字段插入到c_birth后面
4将c_name字段类型修改为varchar(70);
5将c_contact 字段改名c_phone;
6增加c_gender字段,数据类型char(1);
7将表明修改为customers_info;
8删除字段c_city;
9修改数据表的存储引擎为mysiam
10创建另一表格others关联customers_info
11删除others表格
mysql> create database Market;
mysql> use Market;
mysql> create table customers (c_num int(11) primary key auto_increment,c_name varchar(50),c_contact varchar(50) ,c_city varchar(50) ,c_birth datetime not null );
mysql> desc customers;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| c_num | int(11) | NO | PRI | NULL | auto_increment |
| c_name | varchar(50) | YES | | NULL | |
| c_contact | varchar(50) | YES | | NULL | |
| c_city | varchar(50) | YES | | NULL | |
| c_birth | datetime | NO | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
mysql> alter table customers modify c_contact varchar(50) after c_birth;
mysql> alter table customers modify c_name varchar(70);
mysql> alter table customers change c_contact c_phone varchar(50);
mysql> alter table customers add c_gender char(1);
mysql> alter table customers rename customers_info;
mysql> alter table customers_info drop c_city;
mysql> alter table customers_info engine=myisam;
mysql> create table others(id int(11) ,name varchar(40),foreign key(id) references customers(c_num));
或者mysql> alter table others add foreign key(id) references customers(c_num);
mysql> show create table others\G;
*************************** 1. row ***************************
Table: others
Create Table: CREATE TABLE `others` (
`id` int(11) DEFAULT NULL,
`name` varchar(40) DEFAULT NULL,
KEY `id` (`id`),
CONSTRAINT `others_ibfk_1` FOREIGN KEY (`id`) REFERENCES `customers` (`c_num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
mysql> drop table customers;
ERROR 3730 (HY000): Cannot drop table 'customers' referenced by a foreign key constraint 'others_ibfk_1' on table 'others'.
报错:因为customers是父表(others表格有外键链接customers,所以不能直接删除父表,需要取消外键约束才能删除父表)
mysql> alter table others drop foreign key others_ibfk_1;
mysql> drop table customers;desc table:查看表结构
show create table others\G;是为了找到系统分配的外键约束名,方便后续删除外键约束。
什么,你看不懂,不急,且看下文:
写法上:先是代码命令行,然后进行解释!
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
| vastsaasdb |
+--------------------+
6 rows in set (0.00 sec)查看目前mysql中存在的数据库名
mysql> create database test;创建数据库test
mysql> show create database test\G;
*************************** 1. row ***************************
Database: test
Create Database: CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */
1 row in set (0.00 sec)显示创建数据库过程,并显示字符集与存储引擎
Mysql的核心是存储引擎
不同的存储引擎提供不同的存储机制,索引技巧,锁定水平,等功能
在mysql中,不需要在整个服务器中使用同一存储引擎,正对具体的要求,可以对每个表使用不同的存储引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+Yes:表示可以使用
Default:当前默认引擎
mysql> create table db_test4 (id int(11),name varchar(24),deptID int(11), salary float ,primary key(name,deptID));创建联合主键,name字段,deptID都可以作为主键;主键通常非空,唯一
mysql> create table db_test5(id int(11) primary key auto_increment,name varchar(24),deptID int(11),salary float);可以通过为表主键添加auto_increment关键字来实现;默认的初始值是1,每新增一条记录,字段值加1;一个表只有一个auto_increment约束
mysql> insert into db_test5(name,salary) values("lucy",1000),("lura",1200);
mysql> select * from db_test5;
+----+------+--------+--------+
| id | name | deptID | salary |
+----+------+--------+--------+
| 1 | lucy | NULL | 1000 |
| 2 | lura | NULL | 1200 |
+----+------+--------+--------+给表db_test5中的name,salary字段添加两条记录;
mysql> create table db_test5(id int(11) primary key auto_increment,name varchar(24),deptID int(11),salary float)auto_increment=100;
mysql> set auto_increment_increment=40;可以设置自增长序列的初始值为100;设置步长40
mysql> alter table db_test rename db_test1;修改表名用rename
mysql> alter table db_test1 modify name varchar(26);
mysql> alter table db_test1 modify name int(10);修改字段数据类型用modify,可以从varchar转变为int
mysql> alter table db_test1 change deptID loc varchar(20);同时修改字段名和字段类型用change
Alter table change
mysql> alter table db_test1 add column1 varchar(10) not null;
mysql> desc db_test1;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | int(10) | YES | | NULL | |
| loc | varchar(20) | YES | | NULL | |
| salary | float | YES | | NULL | |
| column1 | varchar(10) | NO | | NULL | |
+---------+-------------+------+-----+---------+-------+添加字段用add,默认排在最后一行
mysql> alter table db_test1 add column2 int(11) first;
mysql> desc db_test1;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| column2 | int(11) | YES | | NULL | |
| id | int(11) | YES | | NULL | |
| name | int(10) | YES | | NULL | |
| loc | varchar(20) | YES | | NULL | |
| salary | float | YES | | NULL | |
| column1 | varchar(10) | NO | | NULL | |
+---------+-------------+------+-----+---------+-------+添加字段在第一行,需要关键字first
mysql> alter table db_test1 add colimn3 int(11) after name;
mysql> desc db_test1;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| column2 | int(11) | YES | | NULL | |
| id | int(11) | YES | | NULL | |
| name | int(10) | YES | | NULL | |
| colimn3 | int(11) | YES | | NULL | |
| loc | varchar(20) | YES | | NULL | |
| salary | float | YES | | NULL | |
| column1 | varchar(10) | NO | | NULL | |
+---------+-------------+------+-----+---------+-------+在制定列后加上新列,用after关键字,mysql没有before关键字
mysql> alter table db_test1 drop colimn3,column1;
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 'column1' at line 1删除列,用drop,只能一行行删除!
Mysql数据类型
Mysql中,常见的数据类型如下:
整数类型:int(4字节),float(4字节),double(8字节)
日期时间:year(1字节),time(hh:mi:ss 3字节),date(yyyy-mm-dd 3字节),datetime(yyyy-mm-dd hh24:mi:ss 8字节),timestamp(yyyy-mm-dd hh24:mi:ss 4字节)
字符串:char,varchar,binary,blob,text,set等
二进制类型:bit,binary,blob,longblob
运算符
算术运算符:
加法运算:+
减法运算:-,*,/
取余运算:%
比较运算符:is null 判断一个值是否为null
In
LikeRegexp:正则表达式匹配
逻辑运算符:
not 逻辑非
And 或者&&逻辑与
Or 或者|| 逻辑或
Xor 逻辑异或
注意事项
1、Mysql在进行删除操作时,最好将表中数据备份一次,以防止删除错误,无法回滚。因为数据库的改变是无法撤销的
2、并不是每个表都需要主键,一般的多个表之间进行连接操作时需要用到主键;
3、存储引擎的选择不是完全随意的,父表与子表之间必须有相同的存储引擎;并且只有innodb支持外键;只有两张表都是innodb引擎才能建立外键;
4、外键字段名可以不一致,但是数据类型必须相似,我们一般设置时两字段名一样,数据类型一致;并且添加外键约束必须是表级的,列级不能添加外键约束;
5、添加外键约束两种方式:
创建表时表级添加
创建完之后添加外键约束;