MySql基础

以下如有哪里不明白可以评论或者私信

  1. MySQL免安装配置(初始化,创建服务,修改密码)
    alter user ‘root’@‘localhost’ identified by ‘密码’

  2. 客户端连接到数据库服务器
    连接命令: mysql -u用户名 -p密码
    mysql -uroot -p
    root

mysql> 表示已经成功连接到MySQL服务器

  1. 查询一下当前数据库中有哪些仓库
    mysql> show databases;
    ±-------------------+
    | Database |
    ±-------------------+
    | information_schema |
    | mysql |
    | performance_schema |
    | sys |
    ±-------------------+

4.创建一个自己的仓库来存储数据 temp
mysql> create database temp;-- 分号结尾
Query OK, 1 row affected (0.06 sec)

4.1删除一个数据库 : drop database 数据库名;
mysql> drop database temp;
Query OK, 0 rows affected (0.10 sec)

  1. 使用创建好的这个数据仓库:use 数据库名
    mysql> use temp;
    Database changed

6.查看当前仓库内有哪些数据库的表:show tables;
mysql> show tables;
Empty set (0.00 sec) —表示当前数据库是空的,没有表

– 二、MySQL如何创建一张表
create table 表名(
列名1 类型1 约束,
列名2 类型2 约束,
列名3 类型3 约束
);
– MySQL中常用的数据类型(重要)
– 1)数值类型
整数: tinyint smallint int bigint
浮点数:float double decimal【定点数:处理比较精确的数据】
字符串:char【定长】 varchar【可变长度】
name char(255) : 内存直接占满20个位置
name varchar(255) :会根据内容来具体占用指定的空间,最大空间是20
content text(1000) : 长文本类型
har类型的查询效率要高于varchar
日期: date[年月日] datetime[年月日时分秒] time[时分秒] timestamp[精确到毫秒,时间戳]
补充的高级类型 :
enum(‘男’,‘女’) , 单选
set(‘打游戏’,‘学习’,‘旅游’,‘户外运动’) 多选
– 2)列(字段)约束类型
非空约束 : NOT NULL 【只能限制列,不能限制表】
唯一约束 :UNIQUE
主键约束 :PRIMARY KEY / primary key 【非空且唯一】
外键约束 :FOREIGN KEY / foreign key

– 3) 入门级建表
CREATE TABLE t_user(
id int(8),
name varchar(20),
gender char(4),
age tinyint(3),
mobile char(11),
idcard char(18),
birthday date
);
Query OK, 0 rows affected (0.03 sec) --表示数据库的表创建成功了

– 3.1)查看数据库的表结构: desc 表名;
mysql> desc t_user;
±---------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±------------±-----±----±--------±------+
| id | int(8) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| gender | char(4) | YES | | NULL | |
| age | tinyint(3) | YES | | NULL | |
| mobile | char(11) | YES | | NULL | |
| idcard | char(18) | YES | | NULL | |
| birthday | date | YES | | NULL | |
±---------±------------±-----±----±--------±------+

– 4) 官方推荐在设计数据库表时要遵循三范式3F规则
– 1F : 数据库中的每一列需要具有原子性(不可再分) 【强制】
eg:address(省,市,区,街道,门牌号)
– 2F :每张表必须设计一个与逻辑业务无关的列作为主键来唯一标识这条数据
eg: 如何唯一标识这个人(类似身份证)
– 3F: 表中最好不要出现冗余字段
– 电商互联网企业中,可以适当违反3F来添加一些冗余字段来优化性能
eg: t_user (id,name,mobile…) t_product(pid,pname…)
t_order(id,uid,uname,mobile,address,pid,pname,price)

– 按照三范式来设计表
CREATE TABLE t_user(
id int(8) PRIMARY KEY, – 将id设置为主键
name varchar(20) NOT NULL UNIQUE, – 姓名是非空且唯一的
gender char(4) DEFAULT ‘女’,
age tinyint(3),
mobile char(11) NOT NULL, – NOT NULL列级别的约束
idcard char(18) NOT NULL,
birthday date
);
ERROR 1050 (42S01): Table ‘t_user’ already exists

– 5) 如何删除一张表
mysql> DROP TABLE IF EXISTS t_user; – 若表存在就删
Query OK, 0 rows affected (0.09 sec) – SQL中的注释
mysql>desc t_user
±---------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±------------±-----±----±--------±------+
| id | int(8) | NO | PRI | NULL | |
| name | varchar(20) | NO | UNI | NULL | |
| gender | char(4) | YES | | 女 | |
| age | tinyint(3) | YES | | NULL | |
| mobile | char(11) | NO | | NULL | |
| idcard | char(18) | NO | | NULL | |
| birthday | date | YES | | NULL | |
±---------±------------±-----±----±--------±------+

– 企业级设计表的语法(企业一般都喜欢使用表级别约束)

DROP TABLE IF EXISTS t_user;
CREATE TABLE t_user(
id int(8) NOT NULL COMMENT ‘主键’,
name varchar(20) NOT NULL COMMENT ‘姓名’,
gender char(4) DEFAULT ‘女’ COMMENT ‘性别’,
age tinyint(3) COMMENT ‘年龄’,
mobile char(11) NOT NULL COMMENT ‘手机号’,
idcard char(18) NOT NULL COMMENT ‘身份证’,
birthday date COMMENT ‘生日’,
PRIMARY KEY(id),
UNIQUE(name)
);

建表巩固案例 : (员工表(编号,姓名,性别,生日,薪资,手机号码,所在部门),
部门表(部门编号,部门名称,所在区域))
DROP TABLE IF EXISTS t_emp;
CREATE TABLE t_emp(
id int(8) NOT NULL AUTO_INCREMENT,
ename varchar(30) NOT NULL,
gender char(4) DEFAULT ‘男’,
birthday date,
salary decimal(8,2),
mobile char(11) NOT NULL,
did int(8),
PRIMARY KEY(id),
UNIQUE(mobile)
);
DROP TABLE IF EXISTS t_dept;
CREATE TABLE t_dept(
id int(8) NOT NULL AUTO_INCREMENT,
dname char(20) NOT NULL,
area varchar(30),
PRIMARY KEY(id)
);
– AUTO_INCREMENT 只能配合主键使用(表示自动从1开始递增)

– 查看当前数据库中的所有表 show tables;
mysql> show tables;
±---------------+
| Tables_in_tc32 |
±---------------+
| t_dept |
| t_emp |
| t_user |
±---------------+

DROP TABLE IF EXISTS t_user;
CREATE TABLE t_user(
id int(8) NOT NULL COMMENT ‘主键’,
name varchar(20) NOT NULL COMMENT ‘姓名’,
gender char(4) DEFAULT ‘女’ COMMENT ‘性别’,
age tinyint(3) COMMENT ‘年龄’,
mobile char(11) NOT NULL COMMENT ‘手机号’,
idcard char(18) NOT NULL COMMENT ‘身份证’,
birthday date COMMENT ‘生日’,
PRIMARY KEY(id),
UNIQUE(name)
);

– 重点1 :向表中添加一条数据(单行插入数据)
语法 : insert into 表(列1,列2) value(值1,值2); – 一次添加一条数据
INSERT INTO t_user(id,name,gender,age,mobile,idcard,birthday)
VALUE(1,‘admin’,‘男’,25,‘18817384287’,‘123456789’,‘2008-02-02’);

Query OK, 1 row affected (0.04 sec) : 插入之后会返回一个受影响的行数>1,添加成功
分析错误 :
ERROR 1062 (23000): Duplicate entry ‘1’ for key ‘PRIMARY’ – 违反主键约束
ERROR 1062 (23000): Duplicate entry ‘admin’ for key ‘name’ – 违反唯一约束
INSERT INTO t_user(id,name,gender,age,mobile,idcard,birthday)
VALUE(2,‘tom’,‘男’,25,‘18817384287’,‘123456789’,‘2008-02-02’);

变形1: 默认是全列插入数据(企业不推荐)
INSERT INTO t_user VALUE(2,‘tom’,‘男’,25,‘18817384287’,‘123456789’,‘2008-02-02’);
变形2 :指定字段插入数据
INSERT INTO t_user(id,name,mobile,idcard) VALUE(3,‘jack’,’’,’’);
变形3 :插入数据库多条记录
INSERT INTO t_user(id,name,mobile,idcard)
VALUES(4,‘james’,’’,’’),(100,‘jerry’,’’,’’),(8,‘kevin’,’’,’’);
– 效率较低 :数据库在执行SQL时会自动将多条插入自动拆分成多个单行插入
Query OK, 3 rows affected (0.07 sec) – 插入之后会返回一个受影响的行数3

– 重点2 :修改表中的数据
语法 :update 表名 set 列1=值1,列2=值2; – 更新整张表的列数据
UPDATE t_user SET age=10; – 将这张表中age这一列的数值全部修改为10
Query OK, 6 rows affected (0.03 sec) 返回受影响的行数6

– 开发中使用 : 指定条件修改
语法 : update 表名 set 列1=值1,列2=值2 where 条件;
UPDATE t_user SET age = 30 WHERE id=1;
– 需求 : 将所有的男性用户的身份证号信息删除
UPDATE t_user SET idcard=’’ WHERE gender=‘男’;
– 需求 : 将id=1,3,4的员工年龄修改为25,生日修改为今天now()
UPDATE t_user SET age=25,birthday=now() WHERE id=1 OR id=3 OR id=4;

– 真实案例 : 模拟银行转账操作(张三和李四两人各1000元)
DROP TABLE IF EXISTS t_account;
CREATE TABLE t_account(
id int(8) NOT NULL AUTO_INCREMENT,
name char(20) NOT NULL,
balance decimal(8,2),
PRIMARY KEY(id)
);
INSERT INTO t_account(name,balance) VALUE(‘张三’,‘1000’);
INSERT INTO t_account(name,balance) VALUE(‘李四’,‘1000’);
SELECT * FROM t_account;
– 业务场景 : 张三向李四转账100元
UPDATE t_account SET balance = balance-100 WHERE name=‘张三’;
UPDATE t_account SET balance = balance+100 WHERE name=‘李四’;
±—±-------±--------+
| id | name | balance |
±—±-------±--------+
| 1 | 张三 | 900.00 |
| 2 | 李四 | 1100.00 |
±—±-------±--------+

– 重点3 :删除
语法 :
delete from 表名; – 清空整张表的数据
drop table 表名; – 删除表
真实开发中 :指定条件删除
delete from 表名 where 条件;

-- 练习1 : 删除指定id的记录
DELETE FROM t_user WHERE id=100;

Query OK, 1 row affected (0.06 sec) 删除后返回的是受影响的行数
– 练习2 :删除生日是2020-11-03的男性用户
DELETE FROM t_user WHERE birthday=‘2020-11-03’ AND gender=‘男’;
DELETE FROM t_user; – 清空t_user表中的所有数据

– 重重点 : 查询
语法 : select 列名1,列名2 from 表名;
– 1. 查询所有全列的所有数据
mysql> SELECT * FROM t_user; – * 通配符,表示当前表的所有列
±—±------±-------±-----±------------±----------±-----------+
| id | name | gender | age | mobile | idcard | birthday |
±—±------±-------±-----±------------±----------±-----------+
| 1 | admin | 男 | 25 | 18817384287 | 123456789 | 2008-02-02 |
| 2 | tom | 男 | 25 | 18817384287 | 123456789 | 2008-02-02 |
| 3 | jack | 女 | NULL | | | NULL |
±—±------±-------±-----±------------±----------±-----------+

select now();

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值