欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL基本使用以及基本操作

程序员文章站 2023-01-29 08:18:06
MySQL学习笔记 安装及基本操作 安装: #安装 MySQL 服务端、核心程序 sudo apt-get install mysql-server #安装 MySQ...

MySQL学习笔记

安装及基本操作

安装:

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

创建数据库和新建表

新建数据库:create database 名字;,如:CREATE DATABASE mysql_shiyan; 显示数据库:show databases; 连接数据库:use 名字;,如:use mysql_shiyan; 当连接数据库以后,查看当前数据库的表:show tables;

新建数据表:

格式为:

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

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

CREATE TABLE employee (id int(10),name char(20),phone int(12));

查看表中内容:SELECT * FROM employee(表名); 删除数据库: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 数据类型的信息,可以参考下面两篇博客。

MySQL 中的数据类型介绍 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)
 );

主键 (PRIMARY KEY)是用于约束表中的一行,作为这一行的唯一标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。主键不能有重复且不能为空。

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

例如:

# 正常插入数据

INSERT INTO department(dpt_name,people_num) VALUES('dpt1',11);

#插入新的数据,people_num 为空,使用默认值

INSERT INTO department(dpt_name) VALUES('dpt2');

唯一约束 (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');

外键 (FOREIGN KEY) 既能确保数据完整性,也能表现表之间的关系。

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

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

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

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

非空约束 (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');