MySql
MySql版本:MySQL 8.0
MySql的启动与退出
① 执行cmd命令启动。执行"开始""运行"命令,打开DOS窗口,在DOS提示符下输入登录命令后,按照指示位置输入密码,登录成功的结果如下:
② MySQL客户端登录数据库。在Windows7操作系统中,执行"开始" “所有程序” MySQLMySQL 8.0命令,该目录下包含MySQL Command Line Client和MySQL Command Line Client-Unicode两个选项。它们都是MySQL客户端的命令行工具。执行该命令后,按照提示位置输入密码,即可执行相关MySQL命令
③退出。在"mysql>"提示符下,输入quit或exit命令,都可以退出MySQL登录。
MySQL服务的启动和退出
① 执行"开始"“运行"命令并输入services.msc后按Enter键也可以弹出图18-1所示的窗口。右击mysql57服务,可以在弹出菜单中执行"启动”、“停止”、“暂停” 和"恢复"等命令。
② 执行"开始"“设置”“控制面板”“管理工具”“服务"命令进行设置,打开的窗口如图18-1所示。右击mysql57服务,可以在弹出菜单中执行"启动”、“停止”、“暂停” 和"恢复"等命令。
③ 执行cmd命令启动服务。在DOS窗口中,net start mysql57表示启动MySQL服务,net stop mysql57表示关闭MySQL服务。
④ 选中图1-1的MySQL57服务项右击,在弹出的快捷菜单中选择"属性"命令,弹出如图1-2所示的对话框。
常量和变量的应用
① 查看字符"c"开头的系统变量命令。
mysql>show variables like ‘c%’;
② 查看当前MySQL软件的版本号和当前时间。
mysql>select @@version,current_date;
③ 针对当前会话,把系统变量sql_select_limit的值设置为100。
mysql>set @@session.sql_select_limit=100;
运算符的应用
① 算术运算符。
mysql> select 5+2.7,1.5*3,3/5,10-27.5,5%3;
② 比较运算符。
mysql> select ‘T’>‘B’,1+3=2, ‘X’<‘x’, 8<>8, ‘a’<= ‘u’;
mysql> select null is null,1.3 is null, 11.9 is not null;
mysql> select ‘MySQL’ like ‘MY%’, ‘APPLE’ like ‘AB_’;
③ 逻辑运算符。
mysql> select (‘T’=‘B’),(‘c’ =‘C’)and(‘c’<‘D’)or(7=8);
mysql> select (‘A’=‘a’) && (1=2),(‘F’=‘f’) xor (1+1=2);
ps:xor异或------当任意一个操作数为NULL时,返回值为NULL,对于非NULL的操作数,如果两个的逻辑真假值相异,则返回结果为1,否则为0
④位运算符。
mysql> select 5&1,7|3,1000>>5, ~9,6^7;
mysql> select 5&5,7|9,10<<2, ~0,6^0;
系统函数的应用
① 数学函数。
mysql> select cos(3.67),tan(4.71), sin(5),PI();
mysql> select 6+round(10rand(),0) , 20+ round(10rand(),0);
tips:
rand():随机生成小数
round()保留小数 用法:round(被处理的数,处理的位数)
第一次运行:
第二次运行:
② 时间日期函数。
tips:
dayofyear:返回这一天在这一年的第几天;
dayofweek:返回这一天是周几,范围从1-7,代表从星期日到星期六;
dayofmonth:返回这一天在本月的第几天;
curtime():当天时间;
mysql> select dayofyear(20210512),dayofmonth(‘20210512’);
mysql> select dayofmonth(‘2018-07-15’),dayofweek(now());
mysql> select hour(curtime()),minute(curtime()),second(curtime());
**tips:**hour:小时 minute:分钟 second:秒
mysql> select date_sub(‘2018-10-1 10:10:10’, interval 27 minute);
tips:
interval:表示为时间间隔;
date_sub:将从一个日期/时间值中减去一个时间值(时间间隔)。
③ 字符串函数。
mysql> select concat(‘you’,’ are’,’ best’),concat(‘123’,‘456’,null);
**tips:**concat:连接函数;如有任何一个参数为NULL ,则返回值为 NULL。
mysql> select right(‘ABCDEFGH’,5),reverse(left(‘ABCDEFGH’,5));
tips: reverse:逆转函数;
mysql> select length(‘12345abcde’),char_length(‘123数据库技术cde’);
tips : 判断长度函数;
④ 其他函数。
mysql> select version(),database(),user(),CONNECTION_ID();
mysql> select password(‘teach1727’);
tips: 如上图所示,在使用mysql8.0时,会发现原先写的sql语句password()会被当做异常处理。原因是因为在mysql8.0,移除了该功能函数,所以老的语句和逻辑需要进行更新。
详情可以看下方的官网截图说明:
mysql> select format(7/3,3), format(123456.78,1);
tips: format:格式化数字,也可以说保留几位小数。
查看数据库。
① 查看MySQL数据库的存储位置。
② 查看当前系统中的数据库。
mysql> show databases;
③ 查看系统中的数据库引擎。
mysql> show engines;
④ 设置InnoDB为当前数据库引擎。
mysql> set default_storage_engine=InnoDB;
数据库的基本操作
① 创建info1数据库和info2数据库。
mysql> create database info1
-> default character set gb2312
-> default collate gb2312_chinese_ci;
效果实现
mysql> create database info2;
效果实现
mysql> create database if not exists info2;
mysql> create database if not exists info3;
② 从安装路径查看已经存在的数据库。
tips: 新建的数据库存在于这个文件,不过这个文件是隐藏的。显示出来就好了。
③ 打开数据库info1
mysql> use info1;
④ 修改数据库info2。
mysql> alter database info2
-> default character set gb2312
-> collate gb2312_chinese_ci;
⑤ 显示数据库info1的结构信息。
mysql> show create database info1;
⑥ 删除数据库info2,info3。
mysql> drop database info2;
mysql> drop database info3;
创建表结构。
如表1-1所示,这是教材中的一个student表的结构的字段列表。根据该表的内容,学会利用SQL语句创建表结构。
表1-1 student表结构
① 登录MySQL后,打开数据库teaching,输入下列代码即可创建student表结构。
mysql> create table if not exists student
(
studentno char(11) not null,
sname char(8) not null,
sex enum(‘男’, ‘女’) default ‘男’,
birthdate date not null,
entrance int(3) null,
phone varchar(12) not null,
Email varchar(20) not null ,
primary key (studentno)
);
② 查看表和表结构。
mysql> show tables;
mysql> describe student;
③创建course表结构。程序代码如下:
mysql> create table if not exists course
(
courseno char(6) not null,
cname char(6) not null,
type char(8) not null,
period int(2) not null,
exp int(2) not null,
term int(2) not null,
primary key (courseno)
);
④创建score表结构。程序代码如下:
mysql> create table if not exists score
(studentno char(11) not null,
courseno char(6) not null,
daily float(3,1) default 0,
final float(3,1) default 0,
primary key (studentno , courseno)
);
⑤创建teacher表结构。程序代码如下:
mysql> create table if not exists teacher
(teacherno char(6) not null comment ‘教师编号’,
tname char(8) not null comment’教师姓名’,
major char(10) not null comment ‘专业’,
prof char(10) not null comment ‘职称’,
department char(16) not null comment ‘部门’,
primary key (teacherno)
);
tips: commet:是注释的意思,如果我们想要查看已经有的注释,我们可以用以下的语句查看。
show create table teacher;
⑥ 创建teach_course表结构。程序代码如下:
mysql> create table if not exists teach_course
(teacherno char(6) not null,
courseno char(6) not null,
primary key (teacherno,courseno)
);
⑦ 创建选课表sc。程序代码如下:
mysql>create table sc
(sc_no int(6) not null auto_increment,
studentno char(11) not null,
courseno char(6) not null,
teacherno char(6) not null,
sc_time timestamp not null default now(),
primary key (sc_no)
);
创建完毕,可以通过安装路径查看磁盘文件数据库及其包含的数据表文件。
录入表数据。
数据库teaching的常用表的比较完整的数据,可以参考本书第4章的数据表数据附录的内容。
① 利用insert表student中插入1行数据。
mysql>insert into student
->(studentno,sname,sex,birthdate,entrance,phone,Email)
-> values (‘18122210009’,‘许东山’,‘男’,‘1999/11/5’,789,
-> ‘13623456778’,‘qwe@163.com’);
② 利用insert into命令向表student中插入多行数据。
mysql> insert into student values
-> (‘18122221324’,‘何白露’,
-> ‘女’,‘2000/12/4’,‘879’,‘13178978999’,'heyy@sina.com '),
-> (‘18125111109’,‘敬横江’,
-> ‘男’,‘2000/3/1’,‘789’,’ 15678945623’,'jing@sina.com '),
-> (‘18125121107’,‘梁一苇’,
-> ‘女’,‘1999/9/3’,‘777’,’ 13145678921’,'bing@126.com ');
③利用replace into命令向表course中插入多行数据。
mysql> replace into course values
-> (‘c05103’,‘电子技术’,‘必修’,‘64’,‘16’,‘2’),
-> (‘c05109’,‘C语言’,‘必修’,‘48’,‘16’,‘2’),
-> (‘c05127’,‘数据结构’,‘必修’,‘64’,‘16’,‘2’);
④ 利用set子句向score表插入数据。
mysql> insert into score
-> set studentno=‘19120000111’,
-> courseno=‘c05109’,daily=90,final=95;
⑤ 利用现有的表创建和复制成新表,新表中含有全部或部分字段和数据。
mysql> create table stud as select * from student;
修改表数据
① 修改指定记录的数据。
mysql> update score set daily=95
-> where studentno=‘18137221508’ && courseno=‘c08126’;
没改之前的
改了之后的
② 成批修改记录。
mysql> update stud set entrance=entrance*1.08 where entrance<600;
删除表数据。
① 删除符合条件的指定记录行。删除student表中入学成绩低于600分记录。
mysql> delete from student where entrance <600;
没执行命令之前
执行命令后
② 利用limit子句删除指定记录行。删除student表中入学成绩最低的2行记录。
mysql> delete from student order by entrance limit 2;
没执行前
执行后
③清空表记录,即一次性删除表中所有记录。
mysql> truncate table stud;
没执行前
执行后
主键约束的创建与应用。
① 利用course表创建一个新表course1。
mysql> create table course1 as select * from course;
② 创建course01的主键约束,字段名为cname。
mysql> alter table course1 add primary key (cname);
③ 删除主键约束,重新创建主键约束,字段名为courseno。
mysql> alter table course1 drop primary key;
mysql> alter table course1 add primary key (courseno);
④ 验证主键约束,观察主键值重复时的数据插入情况。
mysql> insert into course1 values
-> (‘c05188’,‘电子技术’,‘必修’,‘64’,‘16’,‘2’);
mysql> insert into course1 values
-> (‘c05188’,‘控制原理’,‘必修’,‘64’,‘20’,‘3’);
外键约束的创建和应用。
① 利用score表创建一个新表score1。
mysql> create table score1 as select * from score;
没执行前
执行后
② 对表score01添加外键。
mysql> alter table score1
-> add constraint fk_cou_score
-> foreign key(courseno) references course1(courseno);
③ 验证外键约束,观察外键值对数据插入情况的影响。
mysql> insert into score1 values
-> (‘18137221508’,‘c05109’,94,92);
没执行前
mysql> insert into score1 values
-> (‘18137221508’,‘c11111’, 99,98);//course1表中无’c11111’课程号
检查约束的创建和应用。
① 创建检查约束, final值以0~100为界值。
mysql> alter table score1
-> add constraint sc_check1 check(final>=0 and final<=100);
② 验证检查约束,观察合法与非法数据插入的情况。
mysql> insert into score1 values
-> (‘19126113307’,‘c05109’,94,99);
执行前:
mysql> insert into score1 values
-> (‘19122203567’,‘c05108’,94,101); // final值超界。
唯一约束的创建和应用。
① 创建唯一约束。
mysql> alter table student add unique(phone);
② 验证唯一约束,观察重复电话数据插入的情况。
mysql> select studentno, sname, phone from student;
mysql> insert into student values
-> (‘19126113306’,‘梅青’,‘女’,‘2001/9/7’,‘787’,’
-> 13245678543’,‘mei@163.com’);
重复之后就会出现这样。
stufentno重复先报它
studentno不重复后 phone唯一约束报错。
(5)非空约束的应用。主键字段值不允许为null,输入空值观察结果。
mysql> insert into course1 values
-> (null,‘网络技术’,‘必修’,‘64’,‘16’,‘2’);
索引的创建与管理。
① 为student表的phone列上建立一个降序普通索引phone_idx。
mysql> create index phone_idx on student(phone desc);
② 在course表的cname列上建立一个唯一性索引cname_idx。
mysql> create unique index cname_idx on course (cname);
③ 在score表的studentno和courseno列上建立一个复合索引stu_cour_idx。
mysql> create index stu_cour_idx on score(studentno,courseno);
④ 在teacher表上建立teacherno主键索引,建立tname和prof的复合索引。
mysql> alter table teacher
-> add primary key(teacherno),
-> add index mark(tname, prof);
⑤ 删除teacher表的mark索引。
mysql> drop index mark on teacher;
⑥ 利用alter table语句同样可以删除cname_idx索引。
mysql> alter table course drop index cname_idx;