MySQL_01_bj



1、MySQL概述
  1. 什么是数据库
    数据库是存储数据的仓库

  2. 哪些公司在用数据库
    金融机构、游戏网站、购物网站、论坛网站 … …

  3. 提供数据库服务的软件
    1、软件分类
    MySQL、SQL_Server、Oracle、DB2、MongoDB、Mariadb … …
    2、在生产环境中,如何选择使用哪个数据库软件
    1、是否开源
    开源软件:MySQL、MongoDB、Mariadb
    商业软件:Oracle、DB2、SQL_Server
    2、是否跨平台
    不跨平台:SQL_Server
    跨平台:MySQL、MongoDB、Oracle、DB2、Mariadb
    3、公司的类型
    商业软件:政府部门、金融机构
    开源软件:游戏网站、购物网站、论坛网站 …
    4、MySQL特点
    1、关系型数据库
    1、关系型数据库特点
    1、数据是以行和列的形式去存储的
    这一系列的行和列成为表
    2、表中的每一行叫一条记录
    3、表中的每一列叫一个字段
    4、表和表之间的逻辑关联叫关系
    5、关系型数据库的核心内容是 关系 即 二维表
    2、示例
    1、关系型数据库存储
    表1、学生信息表
    姓名 年龄 班级
    张三丰 25 AID1712
    周芷若 26 AID1711
    表2、班级信息表
    班级 班主任
    AID1712 侯大大
    AID1711 孙大大
    2、非关系型数据库存储
    {“姓名”:“张三丰”,“年龄”:25,“班级”:“AID1712”}
    {“姓名”:“周芷若”,“年龄”:26,“班级”:“AID1711”,“班主任”:“孙大大”}
    2、跨平台
    可以在Unix、Linux、Windows上运行数据库服务
    3、支持多种编程语言
    python、java、php …
    5、数据库软件、数据库、数据仓库
    1、数据库软件
    是一种软件,可以看得见,可操作,用来实现数据库逻辑功能
    2、数据库
    是一种逻辑概念,用来存储数据的仓库,侧重存储
    3、数据仓库
    从数据量来说,数据仓库要比数据库庞大的多,主要用于数据挖掘和数据分析

    数据库:user表 验证
    数据仓库:哪个时间段用户登录量最多,哪个用户一年购物最多,......
    
2、MySQL安装
1、Ubuntu安装MySQL
1、安装服务端
    sudo apt-get install mysql-server
2、安装客户端
    sudo apt-get install mysql-client
3、Ubuntu安装软件
    1、sudo apt-get update
    2、sudo apt-get -f install
	修复依赖关系
2、Windows安装MySQL服务
    1、下载MySQL安装包
	mysql-installer***5.7.***.msi
    2、双击、按照教程安装即可
3、启动和连接
1、服务端启动
1、查看Mysql服务的状态
    sudo /etc/init.d/mysql start
2、启动Mysql服务
    sudo /etc/init.d/mysql status
3、停止Mysql服务
    sudo /etc/init.d/mysql stop
4、重启Mysql服务
    sudo /etc/init.d/mysql restart
2、客户端连接
1、命令格式
    mysql -h主机地址 -u用户名 -p密码
    mysql -hlocalhost -uroot -p123456
2、本地登录可省略-h选项
    mysql -uroot -p123456
3、断开与服务器的连接
    exit      quit      \q
4、基本SQL命令
1、SQL命令的使用规则
1、每条命令必须以 ; 结尾执行命令
2、SQL命令不区分字母大小写
3、使用 \c 终止当前命令的执行
   mysql> show databases\c
       mysql> show databases;\c  错误,分号已经执行了

2、库的管理
1、库的基本操作
    1、查看已有的库
	show databases;
    2、创建库(指定字符集)
	create database 库名 [character set utf8];
	                     或者[default charset=utf8];
    3、查看创建库的语句
	show create database 库名;
    4、查看当前所在库
	select database();
    5、切换库
	use 库名;
    6、查看库中已有表
	show tables;
    7、删除库
	drop database 库名;
    2、练习
    1、创建库testdb,指定字符集为utf8
        create database testdb character set utf8;
    2、进入到库testdb
        use testdb;
    3、查看当前所在库
        select database();
    4、创建库testdb2,指定字符集为latin1
        create database testdb2 character set latin1;
    5、进入到库testdb2
        use testdb2;
    6、查看testdb2的默认字符集
        show create database testdb2;
    7、删除库testdb
        drop database testdb;
    8、删除库testdb2
        drop database testdb2;
    3、库名的命名规则
    1、可以使用数字、字母、_,但是不能为纯数字
            create database 123;  错误
    2、库名区分字母大小写
	create database Db1;与create database db1;不是一个库
    3、库名具有唯一性
    4、不能使用特殊字符和mysql关键字
	create database db*8;  错误
	create database create;  错误
3、表的管理
1、表的基本操作
    1、创建表
	create table 表名(
	字段名1		数据类型,
	字段名2		数据类型,
	字段名3		数据类型
	...
	)[character set utf8]; 或者[default charset=utf8];

	e.g.  mysql> create table stuinfo(
                      -> id int,
                      -> name char(20),
                      -> age int
                      -> )character set utf8;

    2、查看创建表的语句(字符集、存储引擎)
	show create table 表名;

	ENGINE=InnoDB DEFAULT CHARSET=latin1 |
	       储存引擎               字符集

    3、查看表结构
	desc 表名;
    4、删除表
	drop table 表名;
2、练习
    1、创建库python1
       create database python1;
    2、在 python1 库中创建表 pymysql并指定字符集为utf8,
       字段有三个:id  name  age 数据类型自己定义
       create table pymysql(
       id int,
       name char(20),
       age int
       )character set utf8;
    3、查看表pymysql的默认字符集和存储引擎
        show create table pymysql;
    4、查看表 pymysql 的表结构
        desc pymysql;
    5、删除表 pymysql
    6、删除库 python1
    7、创建库 python2
    8、在库python2中创建表 t1 指定字符集utf8,
       字段有 id name score三个,数据类型自己定义
    9、查看t1的表结构
3、注意
    1、所有的数据都是以文件的形式存放在数据库目录下
    2、数据库目录:/var/lib/mysql
4、表记录的管理
1、在表中插入记录
    1、insert into 表名 values(值1),(值2),...;
    2、insert into 表名(字段名1,字段名2,...) values(值1),(值2),...;

    e.g.    mysql> insert into t3 values
                    -> (1,"MR"),(2,"JS"),(3,"Lucy");

2、查询表记录
    1、select * from 表名 [where 条件];
    2、select 字段名1,字段名2,... from 表名 [where 条件];

        mysql> select * from t3;
    mysql> select id,name from t3;
    字段名较少时,输入字段名,较多用*


3、练习
    1、查看所有库
    2、创建一个新库 studb
    3、在 studb 中创建一张表 tab1,指定字符集utf8,
       表中字段有 id  name  age  score 四个
       create table tab1(
       id int,
       name char(15),
       age int,
       score int
       )character set utf8;
    4、查看tab1的表结构
	desc tab1;
    5、在 tab1 中随意插入2条记录
	insert into tab1 values
	(1,"Tom",22,100),(2,"Lucy",23,80);
    6、在 tab1 的name,age两个字段插入2条记录
	insert into tab1(name,age) values
	("Bob",30),("Green",33);
    7、查看 tab1 中的所有记录
	select * from tab1;
    8、查看 tab1 中所有人的名字和成绩
	select name,score from tab1;
5、如何更改库的默认字符集
1、方法
通过更改MySQL的配置文件实现
2、步骤
1、获取root权限
    sudo -i
2、备份mysql的配置文件
    vi /etc/mysql/mysql.conf.d/mysqld.conf

    注意:vi用法:
          e.g.  vi hello.txt ---》回车进入
	        a  表插入新内容
		Esc 退出
		Shift + :表转到命令行模式
		:wq  表保存并推出
3、修改配置文件
    在[mysqld]下面添加:
    character_set_server = utf8
4、重启MySQL服务/重新加载配置文件(reload)   
    sudo /etc/init.d/mysql restart | reload
5、创建库验证默认字符集是否为utf8
6、客户端把数据存储到数据库服务器上的过程
1、连接到数据库服务器 mysql -h ... -u ... -p ...
2、选择库  use 库名
3、创建表/修改表 
4、断开与数据库服务器的连接 exit | quit | \q
7、数据类型
1、数值类型()
1、整型
    1、int 大整型(4个字节)
       取值范围:0 ~ 2**32 -1(42亿多)
    2、tinyint 微小整型(1个字节)
        1、有符号(signed默认) :-128 ~ 127
        2、无符号(unsigned) : 0 ~ 255

	    mysql> create table t4(
	        -> id int,
	        -> name char(20),
	        -> age tinyint unsigned
	        -> );

	    mysql> insert into t4 values(1,"Green",-3);  错误 0~255

        3、smallint 小整型(2个字节) 
	   取值范围:0 ~ 65535
        4、bigint 极大整型(8个字节) 
	   取值范围:0 ~ 2**64 -1
    2、浮点型
    1、float(4个字节,最多显示7个有效位)
        1、用法
	    字段名 float(m,n)  m:总位数 n:小数位位数
	    float(5,2) 取值范围? -999.99 ~ 999.99

	    mysql> create table t5(
	        -> id int,
	        -> name char(20),
	        -> salary float(10,2)
	        -> );
		
        2、注意
	    1、浮点型插入整数时会自动补全小数位

	       mysql> insert into t5 values(1,"Bob",5000);
	            表中5000.00

	    2、小数位如果多于指定的位数,会对下一位四舍五入

	       mysql> insert into t5 values(2,"Tom",8888.8888);
	            表中8888.89
	    3、最多显示7个有效位

	       mysql> insert into t5 values(3,"Lucy",123456789.00);
	            表中1234567?.?? 
		    
    2、double(8个字节,最多显示15个有效位)
    3、decimal(m+2个字节,最多显示28个有效位)
        1、字段名 decimal(m,n)

	    mysql> create table t7(
	        -> id int,
	        -> name char(20),
		-> age tinyint unsigned,
	        -> salary decimal(18,2)
	        -> )default charset=utf8;

	    mysql> insert into t7 values(1,"武松",30,123456789.123456);
	         表中123456789.12
		
        2、存储空间(整数部分和小数部分分开存储)
	    规则:将9位数字的倍数包装成4个字节
	    即:对于每个部分,需要4个字节来存储9位数的每个倍数,
	        剩余数字所需的存储空间如下表:

	    剩余数字   字节
	    0           0
	    1-2         1
	    3-4         2
	    5-6         3
	    7-9         4
	    示例:decimal(19,9) --->9字节
	    整数部分:10/9=商1余1 4字节+1字节=5字节
	    小数部分:9/9=商1余0  4字节+0字节=4字节
2、字符类型
1、char(定长)
    1、宽度取值范围:0 ~ 255
        mysql> create table t8(
	    -> id int,
	    -> name char(2),
	    -> age tinyint unsigned
	    -> )default charset=utf8; 
	
	mysql> insert into t8 values(1,"上官雨",38); 错误

	mysql> insert into t8 values(1,"关羽",38); 正确

    2、不给定宽度默认为1
2、varchar(变长)
    1、取值范围:1~65535
        mysql> create table t9(
	    -> id int,
	    -> name varchar(15),
	    -> age tinyint unsigned
	    -> )default charset=utf8; 
	
	mysql> insert into t9 values(1,"令狐冲","AID1111"30);

    2、注意:
        1、varchar没有默认宽度,必须给定一个宽带
	2、char和varchar使用时都给定宽度,但不能超过各自的范围

3、char 和 varchar 的特点
    1、char:浪费存储空间,但是性能高
    2、varchar:节省存储空间,但是性能低
4、text / longtext(4G) / blob / longblob(4G)
5、字符类型的宽度和数值类型的宽度的区别
    1、数值类型的宽度为显示宽度,仅仅用于select查询时显示,
       和占用的存储空间大小无关,可用zerofill查看效果
    2、字符类型的宽度超过则无法存储

        mysql> create table t10(
	    -> id int(3) zerofill,
	    -> name char(15),
	    -> )default charset=utf8; 
	
	mysql> insert into t10 values(1,"赵云");
	     表中id为 001

        mysql> create table t11(
	    -> id int(100) zerofill,
	    -> name varchar(15),
	    -> )default charset=utf8; 
	
	mysql> insert into t11 values(1,"赵云");
	     表中id为 000......0001(1前99个0)

    6、ctrl+s 表示屏蔽输入内容,ctrl+q表示显示屏蔽的内容

7、练习
    1、创建一个库studb2,utf8在studb2库中创建表tab,字段如下:
	学号:id 要求显示宽度为3,位数不够用0填充
	姓名:name 变长,宽度20
	班级:class 定长,宽度为7
	年龄:age 微小整型,不能输入负数
	身高:height 浮点型,小数位为2位
	工资:salary 浮点型,最大为 9999999.99
	 create table tab(
	-> id int(2) zerofill,
	-> name varchar(20),
	-> class char(7),
	-> age tinyint unsigned,
	-> height float(5,2),
	-> salary decimal(10,2)
	-> );
    2、查看 tab 的表结构
    3、在表中插入 2 条记录
    4、查询表中记录,只显示姓名,年龄和工资
        select name,age,salary from tab;
    5、查询所有学生的 id 、name 、height 和 salary	
3、枚举类型(字段值只能在列举的范围内选择)
1、enum 单选(最多65535个不同值)
	字段名 enum(值1,值2,...,值N)

        mysql> create table t12(
	    -> id int(3) zerofill,
	    -> name varchar(15),
	    -> class char(7),
	    -> sex enum("男","女","保密"),
	    -> likes set("女","男","学习","人工智能")
	    -> )default charset=utf8; 
	
	mysql> insert into t12 values
	    -> (1,"赵云","AID1712","男","女,学习,人工智能");
	     表中id为 000......0001(1前99个0)

	mysql> select * from t12\G; ---》表竖着显示

2、set 多选(最多64个不同值)
	字段名 set(值1,值2,...,值N)
	like set("Study","Girl","Python","MySQL")
	"Study,Girl"
4、日期时间类型
1、year : 年 YYYY
2、date : 日期 YYYYMMDD
3、time : 时间 HHMMSS
4、datetime
5、timestamp : 日期时间 YYYYMMDDHHMMSS

6、注意:
   插入记录时datetime不给值默认返回NULL,
   而timestamp字段默认返回系统当前时间
       示例
    mysql> create table t13(
        -> id int(3) zerofill,
        -> name varchar(15),
	-> age tinyint unsigned,
        -> birth_year year,
        -> birthday date,
        -> class time,
        -> meeting datetime
        -> )character set utf8;

    mysql> insert into t13 values
        -> (1,"鹰王",88,1928,19280520,090000,20180131000000);

    mysql> create table t14(
        -> id int(3) zerofill,
        -> name varchar(15),
        -> meeting datetime,
        -> class timestamp
        -> )character set utf8;

    mysql> insert into t14(id,name) values(1,"赵敏");

    mysql> select * from t14;
8、表字段的操作
语法:alter table 表名 执行动作;
1、添加字段(add)
    1、添加到末尾    
    alter table 表名 add 字段名 数据类型;
2、添加到开始
    alter table 表名 add 字段名 数据类型 first;
3、添加到指定位置
    alter table 表名 add 字段名 数据类型 after 字段名;

     mysql> create table t15(
	 -> name varchar(15),
	 -> )default charset=utf8; 
	
     mysql> alter table t15 add age tinyint unsigned;
     mysql> alter table t15 add id int first;
     mysql> alter table t15 add sex enum("M","F") after name;

2、删除字段(drop)
alter table 表名 drop 字段名;

     mysql> alter table t15 drop sex;

3、修改字段数据类型(modify)
alter table 表名 modify 字段名 新数据类型;
# 修改数据类型会受到表中原有数据的限制

     mysql> alter table t15 modify name char(15);

4、修改字段名(change)
alter table 表名 change 旧名 新名 数据类型;

     mysql> alter table t15 change name new_name char(15);

5、修改表名(rename)
alter table 表名 rename 新表名;

     mysql> alter table t15 rename new_t15;

6、练习
   1、创建库 studb2
   2、在库中创建表 stuinfo,字段如下:
  姓名、年龄、手机号 char(11)
   3、查看表结构
   4、在表中第一列添加一个字段:学号
  alter table stuinfo add id int first;
   5、把手机号的数据类型改为 bigint 8个字节
  alter table stuinfo modify phnumber bigint;
   6、在表中最后一列添加一个字段:注册时间 register,数据类型为:timestamp
  alter table stuinfo add register timestamp;
   7、在表中 学号、姓名、年龄、手机号 四个字段插入2条记录
  insert into stuinfo(id,name,age,phnumber) values
  (1,"Tom",20,13838384386),(2,"Jim",25,13999999999);
   8、查询5分钟内的记录明细
  select * from stuinfo where
  register > (now() - interval 5 minute);

作业:
1、填空题
1、MySQL中的数据类型有:数值类型 字符类型 枚举类型 日期时间类型
2、关系型数据库的核心内容是 关系二维表
2、简答题
1、简述客户端把数据存储到数据库服务器上的过程
2、char和varchar的区别,各自的特点
2、操作题
1、创建一个学校的库 school
2、在库中创建一个表 students 存储学生信息,字段如下
学号id(显示宽度为3,不够用0填充)、
姓名name、年龄age(不能为负数)、
手机号、成绩score(浮点型)、
性别sex(单选)、爱好likes(多选)、入学时间(年月日)
3、查看students的表结构
4、在students表中增加一个字段id,加在第一列
5、在表中的 姓名、手机号、成绩 三个字段插入3条记录
6、查看所有学生的姓名、手机号和成绩

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值