mysql学习笔记.docx
《mysql学习笔记.docx》由会员分享,可在线阅读,更多相关《mysql学习笔记.docx(20页珍藏版)》请在冰豆网上搜索。
![mysql学习笔记.docx](https://file1.bdocx.com/fileroot1/2023-1/23/306de2c8-6ffa-4432-be34-facdbbe066bc/306de2c8-6ffa-4432-be34-facdbbe066bc1.gif)
mysql学习笔记
mysql学习内容
1建库
2建表
3对表中记录的查询
4用户的密码管理
5用户的授权与权限的撤消
6数据的备份与恢复
7用binlog搭建AB复制
8读写分离
9mysql群集
mysql开源跨平台
库是以目录的形式存放在服务器本机的物理磁盘上的数据库名就是目录名
[root@rhel6bin]#./mysqld_safe--user=mysql&
启动数据库
[root@rhel6bin]#./mysql
WelcometotheMySQLmonitor.Commandsendwith;or\g.
YourMySQLconnectionidis1
Serverversion:
5.0.56-logSourcedistribution
Type'help;'or'\h'forhelp.Type'\c'toclearthebuffer.
[root@rhel6bin]#netstat-utnalp|grepmysql
tcp000.0.0.0:
33060.0.0.0:
*LISTEN30581/mysqld
mysql>
启动数据库
mysql数据库管理员root密码默认为空在没有作任何授权的情况下,管理员帐号为root
每条结束使用;结束
\c;结束这条sql语句
mysql>selectdatabase();查看当前操作的数据库是哪个
+------------+
|database()|
+------------+
|NULL|
+------------+('man','wo
1rowinset(0.00sec)
mysql>selectuser();查询当前操作的数据库的登录用户
+----------------+
|user()|
+----------------+
|root@localhost|
+----------------+
1rowinset(0.00sec)
mysql>showdatabases;
+--------------------------+
|Database|
+--------------------------+
|information_schema|是虚拟库不占用磁盘空间数据存放在内存中存放的是mysql服务的初始信息
|mysql|是服务器的授权信息库不能删除和损坏
|test|是个公共库
+--------------------------+
3rowsinset(0.00sec)
建立自定义数据库库名具有唯一性区分大小写要有标识性不要用关键字不能使用纯数字
mysql>createdatabasestudb;建立数据库
QueryOK,1rowaffected(0.00sec)
mysql>dropdatabasestudb;删除数据库;如果库中有表一并删除
QueryOK,0rowsaffected(0.00sec)
mysql>usestudb;切换数据库
Databasechanged
建表(建表时要使定一个数据库)
具有唯一性,区分大小写,要有标识性,不能用关键字
mysql>createtablestu_tab(
->namechar(8),
->sexchar(4),
->ageint(3)
->);
QueryOK,0rowsaffected(0.04sec)
mysql>showtables;显示当前库中已有的表
+-----------------+
|Tables_in_studb|
+-----------------+
|stu_tab|
+-----------------+
1rowinset(0.02sec)
mysql>descstu_tab;查看表结构
+-------+---------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+-------+---------+------+-----+---------+-------+
|name|char(8)|YES||NULL||
|sex|char(4)|YES||NULL||
|age|int(3)|YES||NULL||
+-------+---------+------+-----+---------+-------+
3rowsinset(0.02sec)
mysql数据类型
1数据类型
整型默认int类型有符号unsigned
浮点型(有小数位)单精度双精度
2字符型
char定长,不够指定宽度补空格
varchar变长(0-255)
3日期类型
日期date
时间time
年year
日期时间datetime
获取当前系统时间
mysql>insertintoshijianvalues('hehe',now(),now());
QueryOK,1rowaffected,2warnings(0.03sec)
mysql>select*fromshijian;
+------+------+------------+
|name|rzsh|shri|
+------+------+------------+
|hehe|2012|2012-05-21|
+------+------+------------+
1rowinset(0.00sec)
mysql>insertintoshijianvalues('zz',2012,"19001213");
QueryOK,1rowaffected(0.00sec)
mysql>select*fromshijian;
+------+------+------------+
|name|rzsh|shri|
+------+------+------------+
|hehe|2012|2012-05-21|
|zz|2012|1900-12-13|
+------+------+------------+
2rowsinset(0.00sec)
年份是以四份显示的,不足四位的以四位补齐,在00~69区间内自动以20补齐,在70~99之间以19补齐
4复合类型
set多选
enum单选
mysql>createtablet4(
->namechar(8),
->sexenum('girl','boy'),
->lovesset('book','film','music')
->);
QueryOK,0rowsaffected(0.05sec)
插入记录
mysql>insertintostu_tabvalues('zz','girl','999');
QueryOK,1rowaffected(0.01sec)
查看表中的记录
mysql>select*fromstu_tab;
+------+------+------+
|name|sex|age|
+------+------+------+
|zz|girl|999|
+------+------+------+
1rowinset(0.00sec)
删除记录
mysql>deletefromstu_tab;
QueryOK,3rowsaffected(0.00sec)
删除某条记录
mysql>deletefromshijianwherename='zz';
QueryOK,1rowaffected(0.03sec)
mysql>select*fromshijian;
+------+------+------------+
|name|rzsh|shri|
+------+------+------------+
|hehe|2012|2012-05-21|
+------+------+------------+
1rowinset(0.00sec)
mysql>insertintoshijianvalues('hehe',now(),now());
QueryOK,1rowaffected,2warnings(0.03sec)
mysql>showcreatetablet4;查看表的建表过程
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|Table|CreateTable|
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|t4|CREATETABLE`t4`(
`name`char(8)defaultNULL,
`sex`enum('girl','boy')defaultNULL,
`loves`set('book','film','music')defaultNULL
)ENGINE=MyISAMDEFAULTCHARSET=latin1|
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1rowinset(0.02sec)
mysql>insertintot4values('zz','girl','book,film');
QueryOK,1rowaffected(0.00sec)
约束条件
在tea库中建teachertab表
有老师的名字老师的名字最多是4个汉字,要求插入记录时必须写老师的名字(name)
老师的性别要求只能是男性或女性也可以保密(sex)
还要有年龄字段老师的年龄大多数都在30岁左右(nl)
还要有所教的科目hostkerneloracle(km)
入职年份(rznf)
生日(sr)
工资(月薪最高在2W左右)(gz)
还要有上班的迟到记录字段(cd)
表结构的修改
语法格式
altertable表名
add添加新字段
drop删除字段
change给字段改名
modify修改字段的类型(字段类型改变,值也改变)
在age字段下面添加一个字段,存放老师的爱好film,music,footbal
mysql>altertableteachertabaddhobbyset('film','music','football')default'football'afterage;
添加一个新字段num存放老师的编号00000001在所有记录上方
mysql>altertableteachertabaddnumvarchar(8)first;
删除字段
mysql>altertableteachertabdropmail;
QueryOK,0rowsaffected(0.06sec)
Records:
0Duplicates:
0Warnings:
0
修改字段名(也可字段类型)
mysql>altertableteachertabchangekmsubjectset('host','kernel','oracle');
QueryOK,0rowsaffected(0.05sec)
Records:
0Duplicates:
0Warnings:
0
修改字段类型
mysql>altertableteachertabmodifysryear;
QueryOK,0rowsaffected(0.04sec)
Records:
0Duplicates:
0Warnings:
0
改变表的名字
mysql>altertableteachertabrenameteacher;
QueryOK,0rowsaffected(0.03sec)
表的复制
mysql>createtablet2selectnum,name,sex,mailfromteacher;
QueryOK,7rowsaffected(0.04sec)
Records:
7Duplicates:
0Warnings:
0
复制表时若字段有key属性,那原表的key属性不会被复制
key
1主键primarykey具有唯一标识表中每条记录的值的一个或多个域。
主键不允许为Null,并且必须始终具有唯一索引。
主键用来将表与其他表中的外键相关联。
2索引index
3unique设置unique的字段其数据不能重复
4外键保持数据一致性,完整性,主要目的是通过主表中的数据控制存储在从表中的数据。
使两张表形成关联,外键只能引用外表中的列的值或使用空值。
索引会增加查询的速度,减慢插入速度,占用磁盘空间
创建index字段
1建表时就把字段设置成索引字段
mysql>createtablet5(
->namechar(8)notnull,
->ageint(3)notnull,
->index(name)
->);
QueryOK,0rowsaffected(0.07sec)
mysql>desct5;
+-------+---------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+-------+---------+------+-----+---------+-------+
|name|char(8)|NO|MUL|NULL||
|age|int(3)|NO||NULL||
+-------+---------+------+-----+---------+-------+
2把表中的某个字段设置成索引字段
mysql>createindexname(index名字)ont6(name)(字段名);
QueryOK,0rowsaffected(0.03sec)
Records:
0Duplicates:
0Warnings:
0
3把表中的多个字段设置成索引字段(一个表中最多有15个索引字段)
mysql>createtablet7(
->namechar(8),
->sexenum('g','b'),
->ageint,
->index(name),
->index(sex)
->);
QueryOK,0rowsaffected(0.07sec)
删除index
mysql>dropindexnameont5;
QueryOK,0rowsaffected(0.07sec)
Records:
0Duplicates:
0Warnings:
0
unique数据不允许重复
mysql>createtablet8(stu_numchar(8)notnull,namechar(8)notnull,agetinyint
(2)unsignednotnull,unique(stu_num),index(name));
QueryOK,0rowsaffected(0.03sec)
mysql>desct8;
+---------+---------------------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+---------+---------------------+------+-----+---------+-------+
|stu_num|char(8)|NO|PRI|NULL||
|name|char(8)|NO|MUL|NULL||
|age|tinyint
(2)unsigned|NO||NULL||
+---------+---------------------+------+-----+---------+-------+
更新update
mysql>updatet8setstu_num='00000003'wherestu_num="";
QueryOK,1rowaffected(0.00sec)
Rowsmatched:
1Changed:
1Warnings:
0
mysql>select*fromt8;
+----------+------+-----+
|stu_num|name|age|
+----------+------+-----+
|00000001|zz|1|
|00000002|zz|2|
|00000003|zz|250|
+----------+------+-----+
mysql>updatet8setage=18,stu_num='00000004'wherename='zz'andage=2;
QueryOK,1rowaffected(0.00sec)
Rowsmatched:
1Changed:
1Warnings:
0
mysql>select*fromt8;
+----------+------+-----+
|stu_num|name|age|
+----------+------+-----+
|00000001|zz|1|
|00000004|zz|18|
|00000003|zz|250|
+----------+------+-----+
主键
mysql>altertablet8
->addidint(3)primarykeyauto_increment;
QueryOK,3rowsaffected(0.04sec)
Records:
3Duplicates:
0Warnings:
0
mysql>desct8;
+---------+---------------------+------+-----+---------+----------------+
|Field|Type|Null|Key|Default|Extra|
+---------+---------------------+------+-----+---------+----------------+
|stu_num|char(8)|NO|UNI|NULL||
|name|char(8)|NO|MUL|NULL||
|age|tinyint
(2)unsigned|NO||NULL||
|id|int(3)|NO|PRI|NULL|auto_increment|
+---------+-----------------------+------+----+---------+--------------------+
复合主键
mysql>createtableserver(hostipchar(15)notnull,sernamechar(10),serportchar(5),accessenum('y','n'),primarykey(hostip,serport));QueryOK,0rowsaffected(0.04sec)
只要复合主键的字段值不同时出现时就允许插入表中复合主键的值不能够同时重复
外键
要给表设置外键字段需要指定当前表的存储引擎为innodb
存储引擎:
一段用来执行sql语句的代码是mysql服务器提供不同存储引擎支持的功能、存储数据方式位置都不同
1当前的mysql服务器支持哪些引擎
mysql>showengines\G;
2查看当前的数据库默认使用的存储引擎
mysql>showvariableslike"table_type";
+---------------+--------+
|Variable_name|Value|
+---------------+--------+
|table_type|MyISAM|
+---------------+--------+
3建表时指定表使用的存储引擎
mysql>createtableb(n