MySQL学习笔记(1)---基本使用以及基本操作

MySQL学习笔记

安装及基本操作

安装:

#安装 MySQL 服务端、核心程序
sudo apt-get install mysql-server
#安装 MySQL 客户端
sudo apt-get install mysql-client
  1. 登录:mysql -u root -p 会登录到root账户,输入密码即可
  2. 查看数据库:show databases;
  3. 选择连接其中一个数据库,语句格式为 use <数据库名>,这里可以不用加分号
  4. 使用命令 show tables;查看数据库中有哪些表(注意不要漏掉“;”)
  5. 使用命令 quit 或者 exit 退出 MySQL

创建数据库和新建表

  1. 新建数据库:create database 名字;,如:CREATE DATABASE mysql_shiyan;

  2. 显示数据库:show databases;

  3. 连接数据库:use 名字;,如:use mysql_shiyan;

  4. 当连接数据库以后,查看当前数据库的表:show tables;

  5. 新建数据表:
    格式为:

    CREATE TABLE 表的名字
    (
    列名a 数据类型(数据长度),
    列名b 数据类型(数据长度),
    列名c 数据类型(数据长度)
    );
    

    我们尝试在 mysql_shiyan 中新建一张表 employee,包含姓名,ID 和电话信息,所以语句为:

    CREATE TABLE employee (id int(10),name char(20),phone int(12));
    
  6. 查看表中内容:SELECT * FROM employee(表名);

  7. 删除数据库:DROP DATABASE mysql_shiyan(数据库名);

数据类型

在刚才新建表的过程中,我们提到了数据类型,MySQL 的数据类型和其他编程语言大同小异,下表是一些 MySQL 常用数据类型:

数据类型 大小(字节) 用途 格式
INT 4 整数
FLOAT 4 单精度浮点数
DOUBLE 8 双精度浮点数
ENUM 单选,比如性别 ENUM(‘a’,’b’,’c’)
SET 多选 SET(‘1′,’2′,’3’)
DATE 3 日期 YYYY-MM-DD
TIME 3 时间点或持续时间 HH:MM:SS
YEAR 1 年份值 YYYY
CHAR 0~255 定长字符串
VARCHAR 0~255 变长字符串
TEXT 0~65535 长文本数据

整数除了 INT 外,还有 TINYINT、SMALLINT、MEDIUMINT、BIGINT。

CHAR 和 VARCHAR 的区别: CHAR 的长度是固定的,而 VARCHAR 的长度是可以变化的,比如,存储字符串 “abc”,对于 CHAR(10),表示存储的字符将占 10 个字节(包括 7 个空字符),而同样的 VARCHAR(12) 则只占用4个字节的长度,增加一个额外字节来存储字符串本身的长度,12 只是最大值,当你存储的字符小于 12 时,按实际长度存储。

ENUM和SET的区别: ENUM 类型的数据的值,必须是定义时枚举的值的其中之一,即单选,而 SET 类型的值则可以多选。

想要了解更多关于 MySQL 数据类型的信息,可以参考下面两篇博客。

插入数据

利用INSERT插入数据,用法:

INSERT INTO 表的名字(列名a,列名b,列名c) VALUES(值1,值2,值3);

我们尝试向 employee 中加入 Tom、Jack 和 Rose:

INSERT INTO employee(id,name,phone) VALUES(01,'Tom',110110110);
INSERT INTO employee VALUES(02,'Jack',119119119);
INSERT INTO employee(id,name) VALUES(03,'Rose');

然后利用SELECT * FROM employee;来显示表中数据:

+------+------+-----------+
| id   | name | phone     |
+------+------+-----------+
|    1 | Tom  | 110110110 |
|    2 | Jack | 119119119 |
|    3 | Rose |      NULL |
+------+------+-----------+

有的数据需要用单引号括起来,比如 Tom、Jack、Rose 的名字,这是由于它们的数据类型是 CHAR 型。此外 VARCHAR,TEXT,DATE,TIME,ENUM 等类型的数据也需要单引号修饰,而 INT,FLOAT,DOUBLE 等则不需要。

第一条语句比第二条语句多了一部分:(id,name,phone) 这个括号里列出的,是将要添加的数据 (01,'Tom',110110110) 其中每个值在表中对应的列。而第三条语句只添加了 (id,name) 两列的数据,所以在表中Rose的phone为NULL

SQL的约束

定义:约束是一种限制,它通过对表的行或列的数据做出限制

在MySQL中,通常有这几种约束:

约束类型: 主键 默认值 唯一 外键 非空
关键字: PRIMARY KEY DEFAULT UNIQUE FOREIGN KEY NOT NULL

如先用如下语句创建数据库:

/*MySQL-03-01.sql*/
CREATE DATABASE mysql_shiyan;
use mysql_shiyan;
CREATE TABLE department
(
  dpt_name   CHAR(20) NOT NULL,/*非空约束*/
  people_num INT(10) DEFAULT '10',/*默认值约束*/
  CONSTRAINT dpt_pk PRIMARY KEY (dpt_name)
 );
CREATE TABLE employee
(
  id      INT(10) PRIMARY KEY,
  name    CHAR(20),
  age     INT(10),
  salary  INT(10) NOT NULL,
  phone   INT(12) NOT NULL,
  in_dpt  CHAR(20) NOT NULL,
  UNIQUE  (phone),/*唯一约束*/
  CONSTRAINT emp_fk FOREIGN KEY (in_dpt) REFERENCES department(dpt_name)/*外键约束*/
 );
CREATE TABLE project
(
  proj_num   INT(10) NOT NULL,
  proj_name  CHAR(20) NOT NULL,
  start_date DATE NOT NULL,
  end_date   DATE DEFAULT '2015-04-01',
  of_dpt     CHAR(20) REFERENCES department(dpt_name),
  CONSTRAINT proj_pk PRIMARY KEY (proj_num,proj_name)
 );
  1. 主键 (PRIMARY KEY)是用于约束表中的一行,作为这一行的唯一标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。主键不能有重复且不能为空。

  2. 默认值约束 (DEFAULT) 规定,当有 DEFAULT 约束的列,插入数据为空时,将使用默认值。

    例如:

    # 正常插入数据
    INSERT INTO department(dpt_name,people_num) VALUES('dpt1',11);
    #插入新的数据,people_num 为空,使用默认值
    INSERT INTO department(dpt_name) VALUES('dpt2');
    
  3. 唯一约束 (UNIQUE) 比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都是唯一的。当 INSERT 语句新插入的数据和已有数据重复的时候,如果有 UNIQUE约束,则 INSERT 失败,比如:
    INSERT INTO employee VALUES(01,'Tom',25,3000,110110,'dpt1');
    #因为phone冲突,所以只能插入一个,第二个会报错
    INSERT INTO employee VALUES(02,'Jack',30,3500,110110,'dpt2');
    
  4. 外键 (FOREIGN KEY) 既能确保数据完整性,也能表现表之间的关系。

    一个表可以有多个外键,每个外键必须 REFERENCES (参考) 另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。

    在 INSERT 时,如果被外键约束的值没有在参考列中有对应,比如以下命令,参考列 (department 表的 dpt_name) 中没有dpt3,则INSERT 失败:

    INSERT INTO employee VALUES(02,'Jack',30,3500,114114,'dpt3');/*另一个表的主键没有dpt3*/
    

    可见之后将 dpt3 改为 dpt2(department 表中有 dpt2),则插入成功.

  5. 非空约束 (NOT NULL),听名字就能理解,被非空约束的列,在插入值时必须非空。

    在MySQL中违反非空约束,不会报错,只会有警告,比如以下语句:

    #INSERT 成功 age 为空,因为没有非空约束,表中显示 NULL
    INSERT INTO employee(id,name,salary,phone,in_dpt) VALUES(03,'Jim',3400,119119,'dpt2'); 
    
    #警告 salary 被非空约束,值为空,表中显示0
    INSERT INTO employee(id,name,age,phone,in_dpt) VALUES(04,'Bob',23,123456,'dpt1');
    

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注