您的位置:首页 > 数据库 > MySQL

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

2018-02-13 20:38 816 查看

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 常用数据类型:

数据类型大小(字节)用途格式
INT4整数
FLOAT4单精度浮点数
DOUBLE8双精度浮点数
ENUM单选,比如性别ENUM(‘a’,’b’,’c’)
SET多选SET(
4000
‘1’,’2’,’3’)
DATE3日期YYYY-MM-DD
TIME3时间点或持续时间HH:MM:SS
YEAR1年份值YYYY
CHAR0~255定长字符串
VARCHAR0~255变长字符串
TEXT0~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 KEYDEFAULTUNIQUEFOREIGN KEYNOT 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');


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: