MySQL的基础学习(一)——基础语句和约束
前言:
MySQL所使用的SQL语言是用于访问数据库的最常用的标准化语言,它是一个关系型数据库,这里,我来记录在终端对数据库的一些操作。
准备工作:
安装MySQL,并对路径配置环境变量
⇒这里有个我用的安装包,有需要就拿去MySQL
~尽量不要学我安装到C盘~
然后在Path中添加 %MYSQL_HOME% 即可
在services中开启服务
打开cmd窗口输入mysql
如此显示,则配置成功
MySQL字符类型:
基础学习:
登录数据库:
在终端输入如下命令即可登录本机数据库
mysql -uroot -p123
-u后面跟用户名(username)
-p后面跟密码(password)
退出数据库操作:
退出数据库的操作界面,回到cmd端
mysql > exit;
mysql > quit;
mysql > \q;
查询已有数据库:
查询数据库中已经存在的数据库
show databases;
注意:一定要有分号
+——————–+
| Database |
+——————–+
| blog |
| information_schema |
| myfirsttest |
| mysql |
| performance_schema |
选择数据库从而进行操作:
use 数据库名
Database changed
查看已有表:
选中数据库后,输入如下代码:
show tables;
+———————–+
| Tables_in_myfirsttest |
+———————–+
| user_name |
+———————–+
查看表内所有内容:
select * from 表名;
+—-+———-+————–+———————+
| ID | ADMIN | PASSWORD | DATE |
+—-+———-+————–+———————+
| 1 | batman | 1199 | 2019-11-05 19:30:38 |
| 2 | superman | 2200 | 2019-11-05 19:30:38
有条件的查看:
select * from user_name where ID=1;
+—-+——–+———-+———————+
| ID | ADMIN | PASSWORD | DATE |
+—-+——–+———-+———————+
| 1 | batman | 1199 | 2019-11-05 19:30:38 |
数据库服务器中创建数据库:
在登录数据库后,输入如下命令来创建数据库
create database 数据库名;
创建数据表:
大致格式如下:
CREATE TABLE pet (
name VARCHAR(20),
sex CHAR(1),
birth DATE);
剖析一下,就是这样:
CREATE TABLE 表名(
字段1 字段1类型,
字段2 字段2类型,
字段3 字段3类型);
查看数据表的具体结构:
输入如下命令:
describe 表名
+——-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| name | varchar(20)| YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
+——-+————-+——+—–+———+——-+
给数据表插入信息:
大致格式如下:
INSERT INTO pet
VALUES ('dudu','f','1999-03-30');
剖析一下就是这样:
INSERT INTO 表名
VALUES ('对应类型的对应信息','对应类型的对应信息','对应类型的对应信息');
+——+——-+——+
| name | sex | birth |
+——+——-+——+
| dudu | f | 1999-03-30 |
+——+——-+——+
删除表:
删除数据表
DROP TABLE 表名
给数据表删除信息:
删除某一条:
delete from 表名 where 条件;
例如此表:
+—-+———-+——+——+
| id | name | age | info |
+—-+———-+——+——+
| 2 | 变体精灵 | 11 | 牛逼 |
| 6 | 熊猫人 | 34 | 凶恶 |
| 7 | 恶魔猎手 | 21 | 敏捷 |
+—-+———-+——+——+
使用命令:
delete from hero where name='熊猫人';
之后即:
+—-+———-+——+——+
| id | name | age | info |
+—-+———-+——+——+
| 2 | 变体精灵 | 11 | 牛逼 |
| 7 | 恶魔猎手 | 21 | 敏捷 |
+—-+———-+——+——+
给数据表修改信息:
修改某一信息:
update 表名 set 字段=新值 where 字段=旧值;
旧值和新值并不在同一位置,旧值只是为了方便索引到某一行
例如:
+—-+———-+——+——+
| id | name | age | info |
+—-+———-+——+——+
| 2 | 变体精灵 | 11 | 牛逼 |
| 7 | 恶魔猎手 | 21 | 敏捷 |
+—-+———-+——+——+
update hero set name="水人" where info='牛逼';
之后:
+—-+———-+——+——+
| id | name | age | info |
+—-+———-+——+——+
| 2 | 水人 | 11 | 牛逼 |
| 7 | 恶魔猎手 | 21 | 敏捷 |
+—-+———-+——+——+
约束:
概念:
MySQL创建数据表的时候,对字段进行的一些约束条件
主要有:
- 主键约束: primary_key
- 自增约束: auto_increment
- 外键约束: foreign references
- 唯一约束: unique
- 非空约束: not_null
- 默认约束: default
通常是在创建数据表的时候给字段进行约束:
CREATE TABLE 表名(
字段1 字段1类型 约束关键字,
字段2 字段2类型 约束关键字,
字段3 字段3类型
);
主键约束(primary_key):
给字段添加主键约束,将会使得该字段不重复,不为空,让记录唯一。
create table admin(
id int primary key,
name varchar(20)
);
然后输入命令:describe admin;
可以看到:
+——-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| id | int(11) | NO | PRI | NULL | |
| name |varchar(20)| YES | | NULL | |
+——-+————-+——+—–+———+——-+
这时我们就不能添加两个ID相同的数据了,也不能建数据设置ID为NULL。
联合主键:
create table user2(
id int,
name varchar(20),
password varchar(20),
primary key(id,name)
);
如此一来,要求 id+name 的值不能重复,而id或name都不能为NULL。
例如表中有数据 1——小王——12345,
则不能再加入 1——小王——23456,
但可以加入 1——小张——98765 或者 2——小王——34534。(联合主键主要应用于多对多的关系结构上)
自增约束(auto_increment):
自增约束常常与主键约束一起使用。
创建一个字段id具有主键约束和自增约束的表
create table admin(
id int primary key auto_increment,
name varchar(20)
);
使用命令describe admin;
查看字段属性
+——-+————-+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+—————-+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20)| YES | | NULL | |
+——-+————-+——+—–+———+—————-+
接下来指定字段插入两条数据:
insert into admin (name) value('张雪');
insert into admin (name) value('李获');
然后select * from admin;
+—-+——+
| id | name |
+—-+——+
| 1 | 张雪 |
| 2 | 李获 |
+—-+——+
修改字段的约束:
alter:更改,修改
增加约束——add:
alter table 表名 add primary key(字段);
例如:
alter table admin add primary key(id);
即给id增加了主键约束
删除约束——drop:
而要删除主键约束:
alter table 表名 drop primary key;
例如:
alter table admin drop primary key;
修改约束——modify:
modify可以重置字段属性
修改主键约束(通过修改字段属性):
alter table 表名 modify 字段 字段类型 约束;
例如:
alter table admin modify id int primary key;
唯一约束(unique):
约束字段的值不可以重复。
create table admin(
id int,
name varchar(20) unique
);
或者
create table admin(
id int,
name varchar(20),
unique(name)
);
使用命令desc admin;
(这里的describe简写了,也是可以正常运行的)
+——-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | UNI | NULL | |
+——-+————-+——+—–+———+——-+
若要删除唯一约束:
alter table admin drop index name;
如果不加index会把整个name字段删除
当使用联合命令赋予unique:
create table admin(
id int,
name varchar(20),
unique(id,name)
);
然后describe会变成这样:
+——-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| id | int(11) | YES | MUL | NULL | |
| name | varchar(20)|YES| | NULL | |
+——-+————-+——+—–+———+——-+
类似于联合主键,id+unique 不重复即可
非空约束(not_null):
create table admin(
id int,
name varchar(20) not null
);
使用describe:
+——-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| id | int(11) | YES | | NULL | |
| name | varchar(20)| NO | | NULL | |
+——-+————-+——+—–+———+——-+
默认约束(default) :
在插入字段值的时候,若没有传入具体值,就会传入默认值
create table admin(
id int,
name varchar(20),
age int default 10
);
使用desc查看:
+——-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| id | int(11) | YES | | NULL | |
| name | varchar(20)| YES | | NULL | |
| age | int(11) | YES | | 10 | |
+——-+————-+——+—–+———+——-+
之后我们插入元素的话,若没有给age赋值,则age使用10;
外键约束(foreign references):
外键约束是涉及两个表的约束——主表(父表)、副表(子表)
主表中的数据被副表所引用,所以在添加和删除数据时有了限制
例如,创建表 world
create table world(
id int primary key,
name varchar(20) unique
);
再创建表hero
create table hero(
id int primary key,
name varchar(20),
address varchar(20),
foreign key(address) references world(name)
);
foreign key(address) references world(name)
这一句即实现了将表内的address字段与外表world的name字段关联,这样一来,hero则为副表,world则为主表,hero的增删中的信息的address值必须在world的name值中有所对应。
注意,创建主表的时候,关联字段必须要有唯一性,如world中的name有unique约束
接下来我们继续,给world里添加了一些信息:
+—-+——–+
| id | name |
+—-+——–+
| 1 | 中国 |
| 3 | 俄罗斯|
| 2 | 美国 |
+—-+——–+
然后我们给hero添加信息:
//可以顺利添加
insert into hero values(1,"孙悟空","中国");
//不能顺利添加
insert into hero values(2,"苏菲玛索","法国");
这就是因为有外键约束,在world中没有”法国”
另一方面:
此时在子表中有 1——孙悟空——中国 的信息,我们如果使用如下命令删除world中的 1——中国
delete from world where id=1;
就会报错,因为 1——中国 还在作为关联中
第一部分就先写到这里了,把你的想法留言到下面吧
希望对你有帮助
欢迎访问我的博客:is-hash.com
商业转载 请联系作者获得授权,非商业转载 请标明出处,谢谢
上一篇: MySQL基础学习---第一天
下一篇: CAS 原子操作(Atomic)