MySQL là một hệ quản trị cơ sở dữ liệu mã nguồn mở [DBMS]. Nó rất phổ biến đối với các nhà phát triển web vì nó là một phần của ngăn xếp LAMP [Linux, Apache, MySQL, PHP/Perl/Python]. Nhiều trang web quy mô lớn phổ biến như WikiPedia, Facebook, Youtube sử dụng cơ sở dữ liệu này. Nhiều khi chúng ta cần sử dụng truy cập cơ sở dữ liệu MySQL từ chương trình C. Ở đây chúng ta sẽ xem cách truy cập cơ sở dữ liệu MySQL từ chương trình C
Ghi chú. CentOS 7. 2 được sử dụng ở đây để cài đặt cơ sở dữ liệu và biên dịch mã. Các bản phân phối Linux này phải giống nhau đối với tất cả các bản phân phối Linux dựa trên RedHat
Cài đặt MySql
Nếu bạn đã cài đặt MySQL trên hệ thống của mình, thì bạn có thể bỏ qua phần này và sử dụng cơ sở dữ liệu hiện có, nếu không, hãy đưa ra các lệnh sau để cài đặt cơ sở dữ liệu MySQL
Xin lưu ý rằng bạn phải là siêu người dùng [root] và cần có kết nối internet khi thực hiện các lệnh này
wget //repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum update yum install mysql-server
MySQL chạy dưới dạng dịch vụ trên hệ thống Linux. Để bắt đầu dịch vụ MySQL, hãy đưa ra lệnh này với tư cách là siêu người dùng [root]
systemctl start mysqld
Bạn cũng có thể kiểm tra xem dịch vụ có thực sự chạy hay không bằng lệnh này
systemctl status mysqld
Nếu dịch vụ đang chạy thì lệnh này sẽ hiện active [đang chạy] như hình bên dưới
Tạo bảng trong cơ sở dữ liệu
Trong phần này, chúng ta sẽ tạo một bảng mẫu trong cơ sở dữ liệu MySQL theo cách thủ công ngay trong máy chủ cơ sở dữ liệu. Chúng ta sẽ truy cập bảng đó từ chương trình C sau.
Đăng nhập vào cơ sở dữ liệu.
mysql -u root -p
Trong MySQL, bạn có thể có nhiều cơ sở dữ liệu. Các bảng sẽ được tạo trong cơ sở dữ liệu. Bạn có thể tạo một cơ sở dữ liệu mới bằng cách ban hành lệnh này
CREATE DATABASE mydb;
Bây giờ bạn phải vào bên trong cơ sở dữ liệu bằng lệnh
USE mydb;
Tạo bảng my_table trong cơ sở dữ liệu mydb bằng câu lệnh SQL này
CREATE TABLE my_table [table_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, first_name TEXT, last_name TEXT];
Chèn một số mục vào bảng my_table
INSERT INTO my_table[first_name, last_name] VALUES['Cristiano', 'Ronaldo']; INSERT INTO my_table[first_name, last_name] values['Lionel', 'Messi'];
Bạn có thể kiểm tra các mục của bảng bằng truy vấn SQL này
________số 8Truy cập cơ sở dữ liệu MySQL từ Chương trình C
Để truy cập cơ sở dữ liệu MySQL, bạn cần có gói mysql-devel trên hệ thống của mình. Gói này cung cấp các thư viện chia sẻ và tệp tiêu đề cần thiết để phát triển chương trình máy khách MySQL. Các tệp tiêu đề được yêu cầu để biên dịch chương trình và các thư viện dùng chung được sử dụng trong thời gian chạy. Để kiểm tra xem gói đã được cài đặt chưa bằng lệnh này
yum info mysql-devel
Nếu chưa cài đặt, hãy ra lệnh này để cài đặt mysql-devel
systemctl start mysqld0
Đây là chương trình máy khách MySQL để truy cập các thực thể cơ sở dữ liệu như bảng, hàng của bảng
systemctl start mysqld1
Trong chương trình ví dụ của chúng tôi ở trên, chúng tôi hiển thị tất cả các bảng trong cơ sở dữ liệu mydb của chúng tôi và tất cả các hàng từ bảng my_table
Trước khi thực hiện bất kỳ thao tác nào với cơ sở dữ liệu, chúng ta cần kết nối với máy chủ cơ sở dữ liệu. Phần này của mã làm điều đó
systemctl start mysqld2
API mysql_init[] khởi tạo một đối tượng MYSQL và trả về địa chỉ [con trỏ] của đối tượng đó trong trường hợp cấp phát thành công. Nếu hàm không phân bổ đối tượng MYSQL, thì nó sẽ trả về NULL. Con trỏ được trả về sẽ được sử dụng làm tay cầm cho các hoạt động cơ sở dữ liệu tiếp theo. Để truy cập bất kỳ phần tử cơ sở dữ liệu nào như bảng hoặc bất kỳ trường nào của bảng, trước tiên chúng ta phải kết nối với máy chủ cơ sở dữ liệu. Hàm mysql_real_connect[] được sử dụng để kết nối với máy chủ cơ sở dữ liệu MySQL. Nó lấy địa chỉ IP hoặc tên miền của hệ thống mà máy chủ MySQL đang chạy. Vì máy chủ của chúng tôi đang chạy trên cùng một hệ thống mà chương trình sẽ chạy, nên “localhost”
được sử dụng làm tên miền của máy chủ. Nếu bạn muốn truy cập cơ sở dữ liệu đang chạy trên máy từ xa, bạn có thể chỉ định tên miền hoặc Địa chỉ IP của máy từ xa. Ngoài ra, chúng tôi phải chỉ định id người dùng, mật khẩu và tên cơ sở dữ liệu. Trong trường hợp của chúng tôi, id người dùng là “root” và tên cơ sở dữ liệu là “mydb”.
systemctl start mysqld3
Đoạn mã trên lấy tất cả các tên bảng từ cơ sở dữ liệu MySQL được kết nối. Để làm điều đó, chúng tôi phải chạy một truy vấn SQL mà chúng tôi có thể thực hiện bằng cách sử dụng API mysql_query[]. Để có được kết quả của truy vấn đã thực hiện, chúng ta phải sử dụng API mysql_use_result[] hoặc mysql_store_result[]. Ở đây, chúng tôi đã sử dụng mysql_use_result[] không mang lại toàn bộ kết quả cho
phía máy khách. Vì vậy, chúng tôi phải gọi mysql_fetch_row[] để tìm nạp từng hàng một từ máy chủ. Nếu mysql_fetch_row[] trả về NULL, thì không còn hàng nào được tìm nạp nữa. Truy vấn “hiển thị bảng” sẽ trả về tất cả tên bảng trong một bảng. Vì vậy, vòng lặp while này sẽ trả về tất cả các bảng có sẵn và in chúng. Giá trị được trả về từ mysql_use_result[] cần được giải phóng bằng API mysql_free_result[].
Phần sau của mã tìm nạp tất cả hàng của bảng my_table
systemctl start mysqld4
Ở đây chúng ta cũng đã sử dụng API mysql_query[] để thực thi truy vấn SQL CHỌN. Ở đây chúng tôi sử dụng mysql_store_result[] để tìm nạp tất cả các hàng đã trả về cho máy khách.
Trong trường hợp này, mysql_fetch_row[] sẽ không mang hàng từ máy chủ, thay vào đó, nó sẽ trả về từ độ phân giải có sẵn trong bộ nhớ của máy khách [chương trình của chúng ta]
Mã bên dưới sẽ duyệt qua tất cả các hàng và in chúng
systemctl start mysqld5
API mysql_num_fields[] trả về số cột của các bảng được trả về. Vòng lặp while bên ngoài lặp qua các hàng và vòng lặp
for bên trong in tất cả các cột của một hàng.
Và cuối cùng là độ phân giải nếu được giải phóng bằng mysql_free_result[]
Biên dịch mã máy khách MySQL
Việc biên dịch mã máy khách MySQL rất phức tạp. Trước hết, bạn cần cài đặt GCC trên hệ thống của mình. Bạn phải đặt cờ biên dịch thích hợp và các thư viện để liên kết. Để làm điều đó, chúng tôi sẽ sử dụng tiện ích mysql_config để nhận các tùy chọn trình biên dịch. “mysql_config –cflags” trả về các cờ Trình biên dịch C để tìm các tệp bao gồm và các cờ trình biên dịch quan trọng cũng như định nghĩa được sử dụng khi biên dịch thư viện libmysqlclient. Và “mysql_config –libs” Thư viện và các tùy chọn cần thiết để liên kết với thư viện máy khách MySQL.
Nếu mã của bạn được lưu trong bản kiểm tra. c C, sau đó sử dụng lệnh này để biên dịch mã.
systemctl start mysqld6
Đầu ra nhị phân sẽ được lưu trữ dưới dạng mysqlc
Nếu chúng ta chạy chương trình, đầu ra sẽ như thế này
systemctl start mysqld7
Tác giả. Srikanta
Tôi viết ở đây để giúp người đọc tìm hiểu và hiểu về lập trình máy tính, thuật toán, mạng, khái niệm hệ điều hành, v.v. một cách đơn giản. Tôi có 20 năm kinh nghiệm làm việc trong lĩnh vực mạng máy tính và tự động hóa công nghiệp. Xem tất cả các bài viết bằng Srikanta