1.连接数据库
通过命令连接远程数据库(配置了mysql的环境变量):
mysql -hIP -P端口号 -u用户名 -p密码
如:
mysql -h192.168.5.116 -P3306 -uroot -p1234562
基本操作
mysql -uroot -p123456 --连接本地数据库
--进入mysql后:
update mysql.user set authentication_string=password('新密码') where user='root' and Host=localhost; --修改用户密码
flush privileges; --刷新权限
-------------------------------------------------------
--注:所有的语句都用分好 ; 结尾
mysql> show databases; ---查看所有数据库、
mysql> use school ---切换数据库 user 数据库名
Database changed
mysql> show tables; ----查看当前数据库中的所有的表
+------------------+
| Tables_in_school |
+------------------+
| student |
+------------------+
1 row in set (0.00 sec)
mysql> desc student; ----显示表的所有数据信息 desc=describe
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | | NULL | |
| age | int(3) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> create database sovzn; ---创建数据库
Query OK, 1 row affected (0.10 sec)
mysql> exit; ---退出数据库连接
Bye
mysql> show create database school; --查看创建数据库school的语句
+----------+-----------------------------------------------------------------+
| Database | Create Database |
+----------+-----------------------------------------------------------------+
| school | CREATE DATABASE `school` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show create table student;----查看创建表student的语句
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`age` int(3) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
数据库语言 CRUD
DDL 定义语言
DML 操作语言(增删改)
DQL 查询语言
DCL 控制语言
操作数据库
1.创建数据库:
CREATE DATABASE [IF NOT EXISTS] sovzn
2.删除数据库:
DROP DATABASE [IF EXISTS] sovzn
3.使用数据库:
注意:如定义的数据库名或表名是一个关键字,则需要给数据库名加 `` (TAB 上面的键)
USE `sovzn`
数据库中的列类型
数值 | ||
---|---|---|
tinyint | 十分小的数据 | 1个字节 |
smallint | 较小的数据 | 2个字节 |
mediumint | 中等大小的数据 | 3个字节 |
int | 标准的整数 | 4个字节 |
bigint | 较大的数据 | 8个字节 |
float | 浮点数 | 4个字节 |
double | 浮点数 | 8个字节 |
decimal | 字符串形式的浮点数,金融计算时一般使用 |
字符串 | |
---|---|
char | 字符串固定大小 0 ~255 |
varchar | 可变字符串 0~65535,常用的变量对应java中的String类型 |
thiytext | 微型文本 2^8-1 |
text | 文本串 2^16 -1 |
时间日期 | |
---|---|
java.util.Date | |
date | YYYY-MM-DD 日期格式 |
time | HH:mm:ss 时间格式 |
DateTime | YYYY-MM-DD HH:mm:ss 最常用的时间格式 |
timetamp | 时间戳 : 1970.1.1到现在的毫秒 |
year | 年份表示 |
数据库中的字段属性
Unsigned | 无符号整数,声明该列不能为负数 |
zerofill | 0填充,不如定义的是三位整数,若输入的是1,则会自动将结果填充为001 |
数据表的类型
关于数据表的引擎(主要说明两种)
INNODB:默认使用(行锁)
MYISAM:早期使用的(表锁,十分影响效率!高并发下就会出现严重的锁问题)
MYISAM | INNODB | |
---|---|---|
事务的支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 支持(5.7以后) |
表空间的大小 | 较小 | 较大,约为MYISAM的两倍 |
在物理存储上的区别:
所有的数据库文件都存在data目录下,一个文件夹就代表一个数据库,本质还是文件的存储!
innoDB:在数据库表中只有一个*.frm文件,以及上级目录下的ibdata1文件( *代表表名)
MYISAM 对应文件有:
- *.frm —表结构的定义
- *.MYD —数据文件(data)
- *.MYI —索引文件(index)
设置数据表的字符集编码
不设置的话,会使用mysql默认的字符集编码:Latin1(不支持中文)
方法如下:
- 在创表语句里面声明:
CHARSET=utf8 --或在使用SQLyog等可视化工具创表时指明字符集编码
在mysql的配置文件my.ini中修改默认编码:
character-set-server=utf8
修改数据表
---修改表名; ALTER TABLE 旧表名 RENAME AS 新表名 ALTER TABLE teacher RENAME AS teacher1 ---增加表的字段:ALTER TABLE 表名 ADD 字段名 列属性 ALTER TABLE teacher1 ADD age INT(3) ---修改字段(修改约束,重命名) ---ALTER TABLE 表名 MODIFY 字段名 列属性 ALTER TABLE teacher1 MODIFY age VARCHAR(11) --修改约束,将age字段的列属性改为 VARCHAR(11) --- ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列约束 -- 注:使用change时,可以在修改字段名的同时修改列属性,如下; ALTER TABLE teacher1 CHANGE age age1 INT(2) --将字段age重命名为age1并且列属性改为INT[2] ALTER TABLE teacher1 CHANGE age1 age2 INT(2) --将字段age1重命名为age2并且列属性不变 --删除表的字段:ALTER TABLE 表名 DROP 字段名 ALTER TABLE teacher1 DROP age1
--删除表 DROP TABLE IF EXISTS teacher1
MYSQL 数据管理
外键
外键的作用:
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据,约束。使两张表形成关联,外键只能引用外表中的列的值或使用空值。
创建外键
1.在建表时创建外键
-- 创建外键的方式一 : 创建子表同时创建外键
-- 年级表 (id\年级名称)
CREATE TABLE `grade` (
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级ID',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
PRIMARY KEY (`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
-- 学生信息表 (学号,姓名,性别,年级,手机,地址,出生日期,邮箱,身份证号)
CREATE TABLE `student` (
`studentno` INT(4) NOT NULL COMMENT '学号',
`studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`sex` TINYINT(1) DEFAULT '1' COMMENT '性别',
`gradeid` INT(10) DEFAULT NULL COMMENT '年级',
`phoneNum` VARCHAR(50) NOT NULL COMMENT '手机',
`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
`borndate` DATETIME DEFAULT NULL COMMENT '生日',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
`idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
PRIMARY KEY (`studentno`),
------------------------------------------------------------------------
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
--------------------------------------------------------------------------
) ENGINE=INNODB DEFAULT CHARSET=utf8
- 在建表后创建外键
-- 创建外键方式二 : 创建子表完毕后,修改子表添加外键
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);
注意:删除有外键关系的表时,必须先删除从表(有外键的表),再删除主表(被引用的表)
以上方式所创建的是物理外键,数据库级别的外键,我们不建议使用(为了避免数据库过多造成困扰),我们若想使用多张表的数据,也就是外键,一般使用程序去实现。
给个饭钱?
- Post link: http://sovzn.github.io/2019/01/08/MySQL%E5%9F%BA%E6%9C%AC%E8%AF%AD%E6%B3%95/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub Issues