面试必知的MySQL数据库知识
Posted Charles梦想家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试必知的MySQL数据库知识相关的知识,希望对你有一定的参考价值。
1、数据库
数据库是为实现一定的目的按某种规则组织起来的数据的集合, 换句话说,数据库就是存储数据的库,其中,mysql是一种关联数据库管理系统。由于其体积小、速度快、成本低受到了许多企业开发人员和普通用户的喜爱和支持。
2、数据库CURD
2.1、创建数据库
创建一个名为mydb1的数据库
create database mydb1;
创建一个使用utf-8字符集的mydb2数据库
create database mydb2 set utf8;
创建一个带校对规则并使用utf-8字符集的mydb3数据库
create database mydb3 set utf8 collate utf8_general_ci;
2.2、查看数据库
显示所有数据库
show database;
2.3、修改数据库
修改mydb1的字符集为utf8
alter database mydb1 character set utf8;
2.4、删除数据库
删除数据库mydb2
drop database mydb2;
3、表的CURD
3.1、创建表
创建表t1
create table t1(id int,name varchar(20))
注:在表创建前,必须选择数据库
use mydb1;
查看选择数据库中的表
show table;
查看表的结构
desc tablename;
3.2、mysql数据类型
3.3、查看表
查看所有表
show table;
查看指定表的创建语句
show create table t1;
3.3、修改表
修改表名:rename table t1 to t2;
增加一个字段
alter table t1 add column h1 double;
修改一个字段
alter table t1 modify column h1 float;
删除一个字段alter table t1 drop column h1;
修改表的字符集为utf8
alter table t1 character set utf8
3.3、删除表
删除表t1
drop table t1;
4、数据的CURD
4.1、创建数据
创建一个员工表,并向表中添加一些记录
create table employee(
id int,
name varchar(20),
sex int,
birthday date,salary double
);
insert into employee(id,name,sex,birthday,salary) values(2,'mimi',1,'1984-02-22',10000);
insert into employee values(1,'charles',1,'1999-09-27',20000);
4.2、检索数据
select id, name as "名字", salary "月薪", salary*12 年薪 from employee where id >=2
4.3、修改数据
将所有员工薪水都增加1000元
update employee set salary=salary+500;
将小王的员工薪水修改为20000元
update employee set salary=20000 where name='小王';
4.4、删除数据
删除表中姓名为小王的数据
delete from employee where name='小王';
删除表中所有数据
delete from employee;
truncate删除表中数据(无条件,效率高)
truncate employee;
5、表的约束
定义主键约束(不允许为空,不允许重复)
primary key:
定义主键自动增长
auto_increment
定义唯一约束:unique
定义非空约束 not null
定义外键约束 constraint ordersid_FK foreign key(ordersid) references orders(id)
删除主键:alter table tablename drop primary key ;
6、MySQL的API函数
6.1、初始化
MYSQL *mysql_init(MYSQL *mysql)
错误处理
unsigned int mysql_errno(MYSQL *mysql)
例子:
#include <stdio.h>
#include "mysql.h"
int main(void)
{
int ret = 0;
MYSQL *mysql = mysql_init(NULL);
if (mysql == NULL) {
ret = mysql_errno(mysql);
printf("mysql_init error:%d\\n", ret);
return ret;
}
printf("init ok\\n");
return 0;
}
6.2、建立连接
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd,
const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag);
6.3、执行SQL
int mysql_query(MYSQL *mysql, const char *stmt_str)
char *psql = "select * from emp";
ret = mysql_query(mysql, psql);
6.4、获取结果
MYSQL_RES *mysql_store_result(MYSQL *mysql)
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
6.5、释放内存
void mysql_free_result(MYSQL_RES *result)
6.6、获取列数
unsigned int mysql_field_count(MYSQL *mysql) 从mysql句柄中获取有多少列
unsigned int mysql_num_fields(MYSQL_RES *result) 从返回的结果集中获取有多少列
int num = mysql_field_count(connect);
while (row = mysql_fetch_row(result)) {
for (i = 0; i < num; i++) {
printf("%s\\t", row[i]);
}
printf("\\n");
}
6.7、获取表头
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result) 全部获取
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result) 获取单个
例子:
MYSQL_FIELD *fields = NULL;
fields = mysql_fetch_fields(result); //得到表头的结构体数组
for (i = 0; i < num; i++) {
//已通过 mysql_field_count 获取了总列数
printf("%s\\t", fields[i].name); //每一列的列名保存在name成员中
}
6.6、关闭连接
void mysql_close(MYSQL *mysql)
7、初始化错误问题 (makefile)
64位Linux环境下,动态库配置不完整。需手动指定编译所用的动态库。
src = $(wildcard *.c)
target = $(patsubst %.c, %, $(src))
inc_path = /usr/include/mysql/
lib_path = /usr/lib64/mysql/
all: $(target)
%:%.c
gcc $< -o $@ -I$(inc_path) -L$(lib_path) -lmysqlclient -lstdc++ -lpthread -ldl -lrt
clean:
-rm -rf $(target)
.PHONY: all clean
以上是关于面试必知的MySQL数据库知识的主要内容,如果未能解决你的问题,请参考以下文章