数据库
目前市面常用的数据库:
1、Oracle:甲骨文、关系型数据库、重量级
2、MongDB:微软
3、Redis:内存数据库
4、Sql Server:微软
5、sqlite3:嵌入式数据库、轻量级
6、Mysql:关系型数据库、重量级,高性能
sql语句:存储数据,删除数据,修改数据,查询数据
sqlite3:
一个轻量级的嵌入式数据库管理系统,台式一个自包含的,无服务器的、零配置的事务性SQL
进入sqlite3命令行语句
sqlite3 your_database_name.db
退出命令行
.quit
创建数据库
.databases
查看数据库所有表
.tabels
第一行:字段
后面跟数据
创建表
CREATE TABLE students(
id INTERGER PRIMARY KEY,
name TEXT NOT NULL,
age INTGER,
grade TEXT
);
如果表不存在就创建,存在就不管
CREATE TABLE if net exists userInfo( \
username text not null, \
passwd text not null);";
展现创建表的模式
.schema students
主键
主键是表中唯一标识每一行的字段
id INTERGER PRIMARY KEY
插入数据
INSERT INTO students(name,age,grade) VALUES('alice',23,'A');
查询数据
查看所有内容
SELECT * from students;
ps: *是通配符
只看name
SELECT name from students;
看name和age
SELECT name,age from students;
想看年龄大于20
SELECT name,age from students where age>20;
想看年龄大于20且成绩为A
SELECT * from students where age>20 and grade='A';
想看年龄在20到30区间
SELECT * from students where age between 20 and 30;
更新数据(修改数据)
UPDATE students SET age='24' where name ='xxx';
删除数据
DELETE FROM students where name='xxx';
SQL函数
SELECT COUNT(*) FROM students;
判断表里是否存在zhangsan,返回值为zhangsan的数量
SELECT COUNT(*) FROM students where username='zhangsan';
SELECT COUNT(*) FROM userInfo where username='zhangsan' and passwd='123';
SELECT COUNT(1) FROM userInfo where username='zhangsan' and passwd='123';
ps:效果一样,但count(1)效率远大于count(*)
计算学生平均年龄
SELECT AVG(age) FROM students;
查询最大
SELECT MAX(age) FROM students;
查询最小
SELECT MIN(age) FROM students;
计算总和
x SELECT SUM(age) FROM students;
MySQL
MySQL是一个关系型数据库管理系统,广泛运用与Web应用和企业系统,具有高性能,高可靠性,高可用性等优点
安装mysql(ubuntu)
sudo apt-get install mysql-server
启动mysql
sudo systemctl
进入mysql命令行
mysql -u root -p
查看mysql服务器里的的数据库名
show databases;
创建数据库
CREATE DATABASE demoTest;
MySQL 客户端切换到名为 demoTest
的数据库
use demoTest;
返回当前被选择的数据库的名称。
如果当前没有选择任何数据库,这条命令将返回 NULL
select database();
创建表
CREATE TABLE students(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
agt INT,
grade VARCHAR(10)
);
AUTO_INCREMENT PRIMARY KEY,:设置id为自增主键
查看表名
show tables;
查看表
DESCRIBE students;
数值类型
数值类型分为整数类型与浮点类型
INT:标准整数
FLOAT:单精度浮点数
日期和时间类型
DATA:日期,格式为 YYYY-MM-DD
TIME:时间,格式为 HH:MM:SS
DATETIME:日期和时间的组合,格式为:YYYY-MM-DD HH:MM:SS
字符串
CHAR:固定长度的字符串
VARCHAR:可变长度的字符串
TEXT:存储长文本数据,最大长度为:65535
二进制类型(用于存储二进制数据):
BINARY:固定长度的二进制字符串,类似于CHAR,但用于二进制
插入数据
INSERT INTO students(name,age,grade) VALUES('zhangsan',21,'A');
查询数据
SELECT * from teacher;
SELECT name,age from teacher;
SELECT age from teacher where age>21;
更新数据
UPDATE teacher SET age='24' where name ='xxx';
删除数据
DELETE FROM teacher where name='xxx';
删除表
DROP TABLE students;
修改表名
rename table teacher to renameteacher;
事务
一组sql语句的集合,这些操作要么全部执行成功,要么全部回滚(重置到语句运行前的状态),以确保数据库的完整性和一致性
事务的四个特性(ACID)
Atomicity(原子性)
- 事务中的所有操作要么全部执行,要么全部不执行
- 事务中的任何一个操作失误,整个失误就会回滚到执行前的状态
Consistrncy(一致性)
Isolation(隔离性)
Durabibity(持久性)
MySQL中的事务控制语句
START TRANSACTION 或 BEGIN
开始事务
COMMIT
提交事务
ROLLBACK
回滚
BEGIN;
UPDATE teacher set age=age-1 where name='zhangsan'
UPDATE teacher set age =age+1 where name='wangwu'
COMMIT;
连接数据库
初始化数据库
MYSQL *sqlDB=nullptr;
sqlDB=mysql_init(NULL);
if(sqlDB==nullptr)
{
cout << "mysql_init failed." << endl;
_exit(-1);
}
建立连接
const char *host = "localhost";
const char *user = "root";
const char *passwd = "1";
const char *baseName = "demoTest";
int port = 3306;
if(mysql_real_connect(sqlDB, host, user, passwd, baseName, port, NULL, 0)==NULL)
{
cout << "connetc failed." << endl;
_exit(-1);
}
执行语句
mysql_query(sqlDB, sql);
查询语句
//查询语句
sql = "select * from students;";
ret=mysql_query(sqlDB,sql);
if(ret!=0)
{
cout << "select failed:" <<mysql_error(sqlDB)<< endl;
_exit(-1);
}
cout << "查询成功..." << endl;
结果集
//结果集
MYSQL_RES *result=mysql_store_result(sqlDB);
if(result==NULL)
{
cout << "mysql_store_result error:" << mysql_error(sqlDB) << endl;
exit(-1);
}
//获取结果集的列数
unsigned cols=mysql_num_fields(result);
//获取结果集的行数
unsigned row=mysql_num_rows(result);
获取表的字段
//获取数据库表的字段
MYSQL_FIELD *field = NULL;
while((field=mysql_fetch_field(result))!=NULL)
{
cout <<left<<setw(10)<<field->name;
}
cout << endl;
获取数据
//获取数据
MYSQL_ROW rows;
while((rows=mysql_fetch_row(result))!=NULL)
{
//每个row变量表示一行
for (int i = 0; i < cols; i++)
{
cout << rows[i] <<"\t";
}
cout << endl;
}
//释放结果集
mysql_free_result(result);
约束
在Mysql中,外键是一种约束,它用于维护关系型数据库中表与表直接的关系,确保数据库的一致性和完整性。
外键的作用: