MySQL数据库基础一

一、MySQL概述

1、什么是数据库 ?
 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库

2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ?
 答:他们均是一个软件,都有两个主要的功能:

a. 将数据保存到文件或内存
b. 接收特定的命令,然后对文件进行相应的操作
3、什么是SQL ?
 答:MySQL等软件可以接受命令,并做出相应的操作,由于命令中可以包含删除文件、获取文件内容等众多操作,对于编写的命令就是是SQL语句。

      MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

二 MySQL数据库的基本使用

1 启动MySQL数据库服务并设置开机自启

[root@localhost ~]# systemctl start mysqld                  //启动mysql服务
[root@localhost ~]# systemctl enable mysqld                 //设置开机自启
[root@localhost ~]# systemctl status mysqld                 //查看mysql服务状态
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2018-11-18 11:40:33 CST; 9h ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 3913 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 3892 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 3917 (mysqld)
   CGroup: /system.slice/mysqld.service
           └─3917 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mys..

1 获取初始密码
[root@mysql50 ~]# grep password /var/log/mysqld.log
2018-11-16T02:28:07.364587Z 1 [Note] A temporary p

2 登录数据库
[root@mysql50 ~]# mysql -u root -p'oRbpo69YNM?G'

3 数据库内 \c 结束一条命令
4 修改密码 (默认初始密码是不能处理数据库)
    mysql> alter user root@localhost identified by 'Taren111`'; 要求:字母大小写,数字,特殊符号。
    
 5 查看包含password的变量:
     mysql> show variables like '%password%';
     
6 临时修改密码策略:
    mysql> set global validate_password_policy=0;
    mysql> set global validate_password_length=6;
    mysql> alter user root@localhost identified by '123456;
    
 7 永久修改密码策略:
   关闭mysqld服务,进入mysql配置文件:
    vim /etc/my.cnf
    [mysqld]
    validate_password_policy=0
    validate_password_length=6
  
  8 数据库命名规则:可以使用数字/字母/下划线 ,但是不能是纯数字
                                  区分大小写,具有唯一性
                                  不可使用指令关键字,特殊字符
                               
  9  练习查看/删除/创建库的相关操作                                    
       mysql> show  databases;                                //查看现有的库                
       mysql> use sys;                                        //切换到sys库
       mysql> create database newdb;                     //新建名为newdb的库
       mysql> drop database newdb;                       //删除名为newdb的库
   
   10  查看指定表的字段结构
        mysql> desc columns_priv\G          //查看表结构,以列表形式展现,末尾不用分号
        mysql> desc columns_priv;          //查看表结构,以表格形式展现末尾需要有分号
        当引用非当前库中的表时,可以用“库名.表名”的形式。比如,切换为mysql库再执   行“desc columns_priv;”,与以下操作的效果是相同的:
        mysql> desc mysql.columns_priv;
         
     11   在mydb库中创建一个名为pwlist的表,包括name、password两列,其中name列作为主键。两个字段值均不允许为空,其中密码列赋予默认空值,相关操作如下所述。
         mysql> use mydb;                 //切换到mydb库
         mysql> create table pwlist(         //新建pwlist表
    -> name char(16) not null,
    -> password char(48)default '',
    -> primary key(name)
    -> );
           mysql> show tables;       //确认新创建的表
           mysql> desc pwlist;         //查看pwlist表的字段结构
           mysql> drop table pwlist;     //删除当前库中的pwlist表
           mysql> show tables;        //确认删除结果
           
     12  mydb库中创建一个学员表
在MySQL表内存储中文数据时,需要更改字符集(默认为latin1不支持中文),以便MySQL支持存储中文数据记录;比如,可以在创建库或表的时候,手动添加“DEFAULT CHARSET=utf8”来更改字符集。
根据上述表格结构,创建支持中文的student表
              mysql> CREATE TABLE mydb.student(
    -> 学号 char(9) NOT NULL,
    -> 姓名 varchar(4) NOT NULL,
    -> 性别 enum('男','女') NOT NULL,
    -> 手机号 char(11) DEFAULT '',
    -> 通信地址 varchar(64),
    -> PRIMARY KEY(学号)
    -> ) DEFAULT CHARSET=utf8;                  //手工指定字符集,采用utf8
         
         mysql> DESC mydb.student;         //查看student表的字段结构
         
         mysql> SHOW CREATE TABLE mydb.student;   查看student表的实际创建指令
       
       13   若要修改MySQL服务的默认字符集,可以更改服务器的my.cnf配置文件,添加character_set_server=utf8 配置,然后重启数据库服务。
         [root@dbsvr1 ~]# systemctl stop mysqld                  //关闭服务
         [root@dbsvr1 ~]# vim /etc/my.cnf                          //修改运行服务配置
         [mysqld]
           .. ..
         character_set_server=utf8        
         [root@dbsvr1 ~]# systemctl restart mysqld                  //重启服务        
         [root@dbsvr1 ~]# mysql –u root -p  
         Enter password:
         . . ..
          mysql> SHOW VARIABLES LIKE 'character%';                  //确认更改结果
         
三    MySQL 数据类型 
     1 整形

MySQL数据类型 含义(有符号)
tinyint(m) 1个字节  范围(-128~127)
smallint(m) 2个字节  范围(-32768~32767)
mediumint(m) 3个字节  范围(-8388608~8388607)
int(m) 4个字节  范围(-2147483648~2147483647)
bigint(m) 8个字节  范围(+-9.22*10的18次方)

     取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。 
int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度。

   2、浮点型(float和double)

MySQL数据类型 含义
float(m,d) 单精度浮点型    8位精度(4字节)     m总个数,d小数位
double(m,d) 双精度浮点型    16位精度(8字节)    m总个数,d小数位

设一个字段定义为float(5,3),如果插入一个数12.345678,实际数据库里存的是12.346,但总个数还以实际为准,即5位。

3、定点数

浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。 
decimal(m,d) 参数m<65 是总个数,d<30且 d

4、字符串(char,varchar,_text)

MySQL数据类型 含义
char(n) 固定长度,最多255个字符
varchar(n) 固定长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65535个字符
mediumtext 可变长度,最多2的24次方-1个字符
longtext 可变长度,最多2的32次方-1个字符

char和varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。 
2.varchar(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。 
3.char类型的字符串检索速度要比varchar类型的快。

varchar和text: 
1.varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。 
2.text类型不能有默认值。 
3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。

5.二进制数据(_Blob)

1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。 
2._BLOB存储的数据只能整体读出。 
3._TEXT可以指定字符集,_BLO不用指定字符集。

6.日期时间类型

MySQL数据类型 含义
date 日期 '2008-12-2'
time 时间 '12:25:36'
datetime 日期时间 '2008-12-2 22:06:44'
timestamp 自动存储记录修改时间

若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。

数据类型的属性

 

MySQL关键字 含义
NULL 数据列可包含NULL值
NOT NULL 数据列不允许包含NULL值
DEFAULT 默认值
PRIMARY KEY 主键
AUTO_INCREMENT 自动递增,适用于整数类型
UNSIGNED 无符号
CHARACTER SET name 指定一个字符集


   新建studb库,创建stuinfo表,表结构、字段类型自定义
   表结构自定义,并合理使用数据类型
   练习各种时间函数的使用
  1 新建studb库,并切换到studb库
        mysql> CREATE DATABASE studb;
    Query OK, 1 row affected (0.00 sec)
    mysql> USE studb;
    Database changed
    
    2 新建stuinfo表    
         mysql> CREATE TABLE stuinfo (
    -> name varchar(16) NOT NULL,
    -> gender enum('male','femal') DEFAULT 'male',
    -> birth date NOT NULL,
    -> job varchar(16) DEFAULT '',
    -> relation varchar(24) NOT NULL,
    -> PRIMARY KEY(name)
    -> );
         
         mysql> DESC stuinfo;     //查看stuinfo表的字段结构
         
         3  练习各种时间函数的使用
         1)使用now()查看当前的日期和时间
    mysql> SELECT now();
         
         2)使用sysdate()查看系统日期和时间
         mysql> SELECT sysdate();
         
         3)使用curdate()获得当前的日期,不含时间
         mysql> SELECT curdate();
         
         4)使用curtime()获得当前的时间,不含日期
         mysql> SELECT curtime();
         
         5)分别获取当前日期时间中的年份、月份、日
         mysql> SELECT year(now()),month(now()),day(now());
         
         6)获取系统日期时间中的月份、日
         mysql> SELECT month(sysdate()),day(sysdate());
         
         7)获取系统日期时间中的时刻
         mysql> SELECT time(sysdate());
         

 

你可能感兴趣的:(数据库mysql)